エクセル2013です。
初めて配列を使います。
以下のように作成し思ったようにできました。
Sub 計算()
'成功
Dim a As Integer
Dim c As Integer
Dim b(5) As Integer
Dim 最終行
Dim 値列
値列 = 17
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For 処理業 = 1 To 最終行
For a = 1 To 5
b(a - 1) = Cells(1, 値列)
値列 = 値列 + 1
Next
値列 = 17
For a = 1 To (22 - 値列)
c = c + b(a - 1)
Next
Cells(処理業, 30) = c
a = 0
c = 0
Next 処理業
End Sub
ただ計算する列の範囲をインプットボックスで入力した値
にしたい為以下のように改造しました。
Dim b(対象列) As Integerでエラーになります
配列には変数は使用できないのでしょうか?
よろしくお願いします。
Sub 計算()
'失敗
Dim a As Integer
Dim c As Integer
Dim b(対象列) As Integer’★ここでERRになる
Dim 最終行
Dim 対象列
Dim 値列
対象列 = 22'インプットボックスで入力した値
値列 = 17
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For 処理業 = 1 To 最終行
For a = 1 To (対象列 - 17)
b(a - 1) = Cells(1, 値列)
値列 = 値列 + 1
Next
値列 = 17
For a = 1 To (22 - 値列)
c = c + b(a - 1)
Next
Cells(処理業, 30) = c
a = 0
c = 0
Next 処理業
End Sub
No.1ベストアンサー
- 回答日時:
以下の★印のように修正・追加してみてください。
Sub 計算()
Dim a As Integer
Dim c As Integer
Dim b() As Integer '★
Dim 最終行
Dim 対象列
Dim 値列
対象列 = 22 'インプットボックスで入力した値
値列 = 17
ReDim b(対象列) As Integer '★
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For 処理業 = 1 To 最終行
For a = 1 To (対象列 - 17)
b(a - 1) = Cells(1, 値列)
値列 = 値列 + 1
Next
値列 = 17
For a = 1 To (22 - 値列)
c = c + b(a - 1)
Next
Cells(処理業, 30) = c
a = 0
c = 0
Next 処理業
End Sub
教えていただいた方法でうまくできました。
ただ
a = 0
c = 0
の後に
ReDim b(対象列) As Integer '★
を入れないと正しく動作しないのがわかりました。
どうもありがとうございました。
No.2
- 回答日時:
'A1:C1000000で、A列とB列の値の合計をC列に求めてみる
'一旦配列に取込、配列上で演算し、一括でセルに書き戻す:1810msec
Sub test()
Dim sh As Worksheet
Dim targetRange As Range
Dim myArray1 As Variant, myArray2 As Variant
Dim i As Long
Dim startTime As Long
startTime = GetTickCount
Set sh = ActiveSheet
With sh
Set targetRange = .Range(.Range("A1"), .Range("B" & .Rows.Count).End(xlUp))
End With
'対象セルを全て配列に取り込む
myArray1 = targetRange.Value
'出力先の配列サイズ決定、一括で書き戻すためには1列でも二次元の配列を宣言する必要がある
ReDim myArray2(1 To UBound(myArray1, 1), 1 To 1)
'メモリー上で演算(Cellアクセスしない)
For i = LBound(myArray1, 1) To UBound(myArray1, 1)
myArray2(i, 1) = myArray1(i, 1) + myArray1(i, 2)
Next i
'一括してCellに書き戻す
'書き戻して1400msec位かかる
'Cell一個当たりは1.4μsecなのだが...
sh.Range("C1").Resize(UBound(myArray2, 1), 1).Value = myArray2
Debug.Print GetTickCount - startTime
End Sub
'普通にCellで演算する場合
'27160msec 15倍かかる
Sub test2()
Dim sh As Worksheet
Dim targetRange As Range
Dim i As Long
Dim startTime As Long
startTime = GetTickCount
Application.ScreenUpdating = False
Set sh = ActiveSheet
With sh
For i = 1 To 1000000
.Cells(i, 3).Value = .Cells(i, 1).Value + .Cells(i, 2).Value
Next i
End With
Application.ScreenUpdating = True
Debug.Print GetTickCount - startTime
End Sub
http://okwave.jp/qa/q8698624.htmlに比べると、速度差は15倍に縮小してしまいましたが、セルに100万個いっぺんに書き戻す部分で時間がかかっています。駄目元でScreenUpdatingや、Calculationを設定してみても効果はありませんでした。
ご参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
白血球が多いとどんな心配があ...
-
尿検査の前日は自慰控えたほう...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
EXCELで式からグラフを描くには?
-
変な話しになります。尿検査で...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
-
Excelで""で囲む方法
-
ある範囲のセルから任意の値を...
-
2つの数値のうち、数値が小さい...
-
精子が黄色?
-
エクセルでエラーが出て困って...
-
納豆食べた後の尿の納豆臭は何故?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報