ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。
数式は
"B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0)))
"B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0)))
"B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0)))
"C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0)))
"B15~B23"に数値1~3を入力した場合イニシャルA~I が入力される式ですが、列を連続で入力できるような処理をVBAのWorksheetFunctionで行うにはどのようにコードを記述すればよいのでしょうか。
ご回答のほどよろしくお願いします。
No.3ベストアンサー
- 回答日時:
続けてお邪魔します。
エラー処理について・・・
安直な方法ですが
↓のコードにしてみてください。
Sub Sample2()
Dim i As Long, j As Long
On Error Resume Next '←おまじないでこの行を追加
For j = 2 To 5
For i = 1 To 3
Cells(i + 10, j) = WorksheetFunction.Index(Range("A1:A9"), WorksheetFunction.Match _
(i, Range(Cells(15, j), Cells(23, j)), False))
Next i
Next j
End Sub
これで1~3のデータがない場合でも何とか対処できると思います。m(_ _)m
No.2
- 回答日時:
No.1です!
>WorksheetFunctionで行うにはどのように・・・
を見逃していました。
WorksheetFunctionでもできなくはないですが、数式を入れる範囲の行・列の変数を宣言し
For~Nextでループしてやる必要があるのではないかと思います。
Sub Sample2()
Dim i As Long, j As Long
For j = 2 To 5
For i = 1 To 3
Cells(i + 10, j) = WorksheetFunction.Index(Range("A1:A9"), WorksheetFunction.Match _
(i, Range(Cells(15, j), Cells(23, j)), False))
Next i
Next j
End Sub
といった具合です。
エラー処理はしていません。
それよりもNo.1のようにワークシート関数をそのまま利用するほうが簡単だと思います。
ただし、前回のコードでは実データではなく関数によって表示されているデータになりますので、
実データにする場合は↓のコードに変更してみてください。
Sub Sample1()
With Range("B11:E13")
.Formula = "=IF(ISERROR(INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))),"""",INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0)))"
.Value = .Value
End With
End Sub
何度も失礼しました。m(_ _)m
この回答への補足
上のコードFor~Nextの場合がセルに式が入らず次のセル値参照時に進めますが"B15"セル等にに数値が入っていなかった場合デバックエラーが表示されます。
"B11"セルは空白でも他のセルは入力可能になるようにエラー処理ができないものでしょうか。
No.1
- 回答日時:
こんばんは!
列・行をオートフィルでコピーした場合、
行番号・列番号も増えていく関数をそのまま記載すればOKだと思います。
まず、B11セルに入れる数式を考えます。
色々方法はありますが、仮に
=IF(ISERROR(INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0)))
という数式にすれば行・列方向にオートフィルでお望みに結果になると思いますので、
それをそのまま利用します。
コードにすれば
Sub Sample1()
Range("B11:E13").Formula = "=IF(ISERROR(INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))),"""",INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0)))"
End Sub
といった感じになると思います。
※ 注意点としては 普通の関数の「空白」に!のところは「ダブルクォーテーション」を4個続けます。
こんなんではどうでしょうか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Web画面の文字をVB6で取得したい
-
Excel 範囲指定スクショについ...
-
配列のペースト出力結果の書式...
-
VBA 別ブックから条件に合うも...
-
エクセルVBAにて =A1=B1とすれ...
-
Excelについて
-
【ExcelVBA】インデックスが有...
-
Excelで画像URLを1つずつセル...
-
Excel VBA 文字列のセルを反映...
-
VBA 指定した回数分、別シート...
-
【VBA】カーソルのある行の1行...
-
ExcelVBAのFindFirstエラ...
-
VBA 入力箇所指定方法
-
VBA 複数の各シートに行を追加...
-
10行目にフィルターを使用して...
-
Excel VBAで値を変えながら、pd...
-
VBA実行後に元のセルに戻りたい
-
エクセルのマクロについて教え...
-
vbaにてseleniumを使用したedge...
-
メールの件名をデコードしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 別ブックからコピペしたい...
-
Vba ファイル書き込み時に書き...
-
Excel_VBAについて質疑です。(...
-
VBAの間違い教えて下さい
-
VBA コードどこがおかしいですか?
-
VBA 円グラフ 特定条件に一致し...
-
VBA 別ブックから条件に合うも...
-
pdfファイルの複数添付 引数の型
-
【ExcelVBA】インデックスが有...
-
ExcelVBAマクロで実行した時の疑問
-
Vba UserformからExcelシートの...
-
VBA初心者です。次のVBAコード...
-
Outlookの「受信日時」「件名」...
-
Excel 範囲指定スクショについ...
-
vbs ブック共有を解除
-
配列のペースト出力結果の書式...
-
Excel VBAで値を変えながら、pd...
-
VB.net(VB)で、フォームにExcel...
-
vbaにてseleniumを使用したedge...
-
ExcelVBA シート名を複数セルか...
おすすめ情報