0

だから私はこの大きなスプレッドシートを通常のExcel関数と一緒にまとめましたが、パフォーマンスを低下させている参照値とは対照的に、vbaを使用して静的な値を貼り付けることで、速度を上げてファイルサイズを小さくしたいと考えています(ワークブックは約20です)現在 mb であり、今後も増加していきます)

何をしたいのかはわかっていますが、VBAの経験がまだ始まったばかりであるため、簡潔な表現にするのに苦労しています。

Z スコア = (数値 - すべての数値の平均) / (すべての数値の標準偏差)

Worksheets("relay").Value("c32") にはすべての数値の平均が含まれます Worksheets("relay").Value("c33") にはすべての数値の標準偏差が含まれます

私がやりたいことは、worksheets("Hitterscalc").range("cb:cb") 列にあり、worksheets("Hitterscalc").range("J: J") 対応する A 列のセルが "" に等しくなく、対応する AB 列が 1 に等しい、その列のすべての行

誰かがこれについての簡潔な声明について何か考えを持っていますか? 私はそれをセルごとに大まかに行うことができますが、ループを入れてすべての列を実行し始めると、残念ながらコードと頭の中ですべてがバラバラになります。

お時間をいただきありがとうございます

Application.ScreenUpdating = False
Worksheets("hitterscalc").Range("cb2").FormulaR1C1 = _
   "=IF(OR(RC[-79]="""",RC[-52]<>1,Settings!R4C[-74]<>""yes""),"""",(RC[-70]-relay!R32C[-77])/relay!R33C[-77])" 
Sheets("HittersCalc").Select 
Range("CB2").Select 
Selection.AutoFill Destination:=Range("CB2:CB701") Range("CB2:CB701").Select Columns("CB:CB").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False
4

2 に答える 2

1

以下は、コードと同等である必要があります。

Worksheets("hitterscalc").Range("cb2").FormulaR1C1 = _
   "=IF(OR(RC[-79]="""",RC[-52]<>1,Settings!R4C[-74]<>""yes""),"""",(RC[-70]-relay!R32C[-77])/relay!R33C[-77])" 

'NOTE: Here I am assumimg that there is a column (I've gone with 
'column A but you should change it to whatever is appropriate) that has data
'as far down as you plan on autofilling the columns. So we use that to find how
'far down to autofill rather than hard coding it to 701 as in your code (this is
'the same as when you push ctrl + down in excel)
dim lastRow as int
lastRow = Sheets("HittersCalc").Range("A2").End(xlDown).row

Sheets("HittersCalc").Range("CB2").AutoFill Destination:=Range("CB2:CB" & lastRow) 

'A cleaner way to copy and paste by value that doesn't involve the clipboard
Range("CB:CB").Value = Range("CB:CB").Value
于 2013-02-08T15:03:25.210 に答える