![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】甲子園での思い出の残し方
「球場の砂を持って帰る」はもう古いと思った高校球児が、甲子園で負けた際に、思い出に残そうと思って行ったこと
-
VBAで配列の計算
Excel(エクセル)
-
選択範囲の空白セルに0を入れるマクロ
Word(ワード)
-
Variant型で宣言してるのにEmptyになる
Visual Basic(VBA)
-
-
4
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
配列の要素がすべてカラかどうかの判断
Visual Basic(VBA)
-
9
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
10
UserForm1.Showでエラーになります。
工学
-
11
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
12
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
13
VBA 空白セルを削除ではない方法で詰めるやり方
Visual Basic(VBA)
-
14
配列をループでたくさん宣言したいのですが、配列名や変数名を変数で宣言することはできませんか?
Visual Basic(VBA)
-
15
VBA 見つからなかった時の処理
Excel(エクセル)
-
16
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
17
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
18
EXcelのマクロで相対パスでファイルを開く
その他(Microsoft Office)
-
19
for next の不連続版があるでしょうか
その他(Microsoft Office)
-
20
VBA 複数の行を高速で削除する方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
エクセルで特定の文字が入って...
-
エクセルのまとめてカッコをつ...
-
Excel 頭に「0」がついている...
-
excelで、1つのセルに入ってい...
-
Excelの結合でA列とB列の内容...
-
Excelで中央揃えが出来ない?
-
エクセルの関数
-
エクセル、11と1の区別
-
ある列のセルに特定の文字が入...
-
桁の違う数値での並び替え
-
エクセルで、数字列の中にハイ...
-
Excel強制終了
-
VLOOKUPのあいまい検索(スペー...
-
EXCELマクロでワイルドカードを...
-
excel: 2行ずつ間隔を空けて関...
-
エクセルで直近の連続回数を求める
-
数値の列から偶数のみを抽出す...
-
複数行に空白行を一括で挿入し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
エクセルで特定の文字が入って...
-
エクセルのまとめてカッコをつ...
-
Excelで中央揃えが出来ない?
-
桁の違う数値での並び替え
-
エクセルで、数字列の中にハイ...
-
Excel 頭に「0」がついている...
-
ある列のセルに特定の文字が入...
-
連続データを1行おきに貼り付け...
-
エクセルに入力した文字列に句...
-
Excel 指定行までコピーをおこ...
-
excelで、1つのセルに入ってい...
-
Excel強制終了
-
セル内文章から、英数字のみ取...
-
Excelでセルの高さを保ったまま...
-
Excelの結合でA列とB列の内容...
-
【エクセル】2行に一行のように...
-
excel: 2行ずつ間隔を空けて関...
-
エクセル、11と1の区別
おすすめ情報