
B列の1行目から232970行目を、空白セルであれば0を入力するという構文を
作成してみました。(配列について勉強中)
これをB列だけでなく、FQ列まで同じように処理を実行したいと考えています。
Dim i As Long
Dim MyArray As Variant
MyArray = Range(Cells(1, "B"), Cells(232970, "B"))
For i = 1 To 232970
If MyArray(i, 1) = "" Then
MyArray(i, 1) = "0"
End If
Next i
Range(Cells(1, "B"), Cells(232970, "B")) = MyArray
End Sub
↓
FQ列まで同じように繰り返しということで、下記のようにしてみました。
これでも動くのですが、二次元配列で行だけでなく列まで配列出来たらもっと
スマート&速度アップになるでしょうか?
二次元配列についてあまりよく理解できていませんのでその点ご教授頂ければと考えています。
Dim i, s As Long
Dim MyArray As Variant
For s = 2 To 173
MyArray = Range(Cells(1, s), Cells(23297, s))
For i = 1 To 23297
If MyArray(i, 1) = "" Then
MyArray(i, 1) = "0"
End If
Next i
Range(Cells(1, s), Cells(23297, s)) = MyArray
Next s
No.1ベストアンサー
- 回答日時:
>MyArray = Range(Cells(1, "B"), Cells(232970, "B"))
範囲を纏めて入れられるので FQ列までまとめて入れる事も可能です。
セル範囲を配列に入れるので、この場合、配列内は1から始まります 1 To 172
MyArray(1 to 23297,1 to 172)
MyArray = Range(Cells(1, 2), Cells(23297, 173))
For i = 1 To 23297
For s = 1 To 172
If MyArray(i, s) = "" Then
MyArray(i, s) = "0"
End If
Next s
Next i
Range(Cells(1, 2), Cells(23297, 173)) = MyArray
一度に出力するので、書き出し部分の回数分くらい早いかと思います。
早速のご回答誠にありがとうございます。
行だけでなく、列もまとめて配列に入れる事が出来るのですね。
ご教示頂いた内容を試した結果、問題無く実行できました。
No.3
- 回答日時:
こんにちは!
空白セルには数式は入っていないのですかね?
そうであればNo.2さんがおっしゃっている方法が一番簡単で速いと思います。
質問文では232970行までとなっていますが、コードは23297行までですね。
とりあえず23297行目までとしています。
配列を使わず一気にやる場合は
Sub Sample1()
On Error Resume Next '//←念のため//
Range(Cells(1, "B"), Cells(23297, "FQ")).SpecialCells(xlCellTypeBlanks).Value = 0
End Sub
こんな感じでいけると思います。
どうしても二次元配列で処理したいのであれば・・・
Sub Sample2()
Dim i As Long, j As Long
Dim myR
myR = Range(Cells(1, "B"), Cells(23297, "FQ"))
For i = 1 To 23297
For j = 1 To Range("FQ1").Column - 1
If myR(i, j) = "" Then
myR(i, j) = 0
End If
Next j
Next i
Range(Cells(1, "B"), Cells(23297, "FQ")) = myR
End Sub
こんな感じでしょうかね。
※ 余談ですが、
個人的に列番号を取得する場合、A列・B列などであればすぐに1や2のように取得できますが
列数が増えた場合は指折り数えたり、今回のように「FQ」列などとてつもない数になりますので、
>Range("FQ1").Column
のようにすればFQ列の列番号が簡単に取得できます。
(ちなみに「-1」としているのはB列~FQ列が配列の列数になりますので、A列分の「1」をマイナスする必要があります)
なので列数が少なくても、仮にA1セルだとすると自分では
>Cells(1, 1)
とせずに
>Cells(1, "A")
のような感じでやっています。
もちろん慣れている方で構わないと思いますが・・・m(_ _)m
No.2
- 回答日時:
それでも良いと思いますが、自分なら別の手順になる。
以下は「マクロの記録」で操作をそのままマクロにしたものです。
A1セルには「0」が入力されていて、
それをコピー。
B1セルからFQ232970セルまでの範囲を選択。
”ジャンプ機能” で空白のセルを選択。
そこへ「0」を貼り付け。
最後にA1セルを選択して終わる。
こんな感じ。
Sub Macro1()
'
' Macro1 Macro
'
'
Range("A1").Select
Selection.Copy
Range("B1:FQ232970").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
ActiveSheet.Paste
Range("A1").Select
End Sub
このほうがスマート。
(でも、これ、マクロにする意味無いんだよなあ…手動でやっても一瞬で終わるし、繰り返し行うこともない)
配列を使っても良いけど、
システムに搭載されているメモリに依存するかもしれないので、
質問にあるような広範囲に対して自分はあまり使わない。
・・・
For ~ Next
の使い方を覚えるなら、質問文にあるやり方で十分です。
Excelに処理速度を求めるなら、Excelが持っている ”標準の機能” を使うと良いでしょう。
記述も簡単になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- 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も見ています
-
選択範囲の空白セルに0を入れるマクロ
Word(ワード)
-
エクセルVBAで配列内に空白データを入れる場合
その他(Microsoft Office)
-
VBAで配列の計算
Excel(エクセル)
-
-
4
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
7
VBAで文字列を数値に変換したい
Excel(エクセル)
-
8
VBAを何回も作り直して、容量が増えた
Excel(エクセル)
-
9
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
10
空白を0とみなす関数
Excel(エクセル)
-
11
配列のペースト出力結果の書式について
Visual Basic(VBA)
-
12
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
13
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
14
エクセルのオートフィルタで抽出できない
Excel(エクセル)
-
15
Excel-VBA>コントロールをグレイアウトするには?
Excel(エクセル)
-
16
「インスタンス」の意味をわかりやすく教えてください
Visual Basic(VBA)
-
17
エクセルVBAのエディターが上書きモード?に・・・・。
Excel(エクセル)
-
18
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
19
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
20
Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
エクセルで特定の文字が入って...
-
Excelで中央揃えが出来ない?
-
Excel強制終了
-
桁の違う数値での並び替え
-
Excelの結合でA列とB列の内容...
-
excelで、1つのセルに入ってい...
-
Excelの特定のセルを1つおきに...
-
セル内文章から、英数字のみ取...
-
エクセルで、数字列の中にハイ...
-
マクロ(Excel)で上下のセルの...
-
Excel2013 カラースケールを別...
-
Excel 頭に「0」がついている...
-
エクセルに入力した文字列に句...
-
Excel 指定行までコピーをおこ...
-
Excelで日付の異なる時間帯別集計
-
空白への0入力 二次元配列(VBA)
-
連続データを1行おきに貼り付け...
-
Excelのデータ間引きについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
エクセルで特定の文字が入って...
-
Excelで中央揃えが出来ない?
-
エクセルのまとめてカッコをつ...
-
Excel 指定行までコピーをおこ...
-
数値の列から偶数のみを抽出す...
-
桁の違う数値での並び替え
-
Excel 頭に「0」がついている...
-
エクセルに入力した文字列に句...
-
excelで、1つのセルに入ってい...
-
Excel強制終了
-
エクセルで、数字列の中にハイ...
-
Excel2013 カラースケールを別...
-
Excelの結合でA列とB列の内容...
-
WEEKDAY 空白も7になってしまう
-
エクセルの関数
-
連続データを1行おきに貼り付け...
-
セル内文章から、英数字のみ取...
-
エクセルで、数値の範囲で仕分...
おすすめ情報