11行の各セルに下記の通り、数式をマクロで組み込みました。少しでもマクロを簡潔にしようと、これまでいただいた各方々のご回答を参考にして、INDEX、MATCH関数を用いて組み込んだマクロが後段2です。結果は同じようになりましたが、ループ,置換方等色々な組み方、表示方法があるのではないかと思います。参考にしたいため他の方法があればお教えください。
Sub 記録表初期設定()
Worksheets("記録表").Activate
ActiveSheet.Unprotect
Range("d11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,10,0)="""","""",VLOOKUP($B11,データ!$B:$AB,10,0)))"
Range("e11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,11,0)="""","""",VLOOKUP($B11,データ!$B:$AB,11,0)))"
Range("f11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,12,0)="""","""",VLOOKUP($B11,データ!$B:$AB,12,0)))"
Range("g11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,13,0)="""","""",VLOOKUP($B11,データ!$B:$AB,13,0)))"
Range("h11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,14,0)="""","""",VLOOKUP($B11,データ!$B:$AB,14,0)))"
Range("i11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,15,0)="""","""",VLOOKUP($B11,データ!$B:$AB,15,0)))"
Range("j11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,16,0)="""","""",VLOOKUP($B11,データ!$B:$AB,16,0)))"
Range("k11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,17,0)="""","""",VLOOKUP($B11,データ!$B:$AB,17,0)))"
Range("l11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,18,0)="""","""",VLOOKUP($B11,データ!$B:$AB,18,0)))"
Range("m11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,19,0)="""","""",VLOOKUP($B11,データ!$B:$AB,19,0)))"
Range("n11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,20,0)="""","""",VLOOKUP($B11,データ!$B:$AB,20,0)))"
Range("o11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,21,0)="""","""",VLOOKUP($B11,データ!$B:$AB,21,0)))"
Range("p11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,22,0)="""","""",VLOOKUP($B11,データ!$B:$AB,22,0)))"
Range("t11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,25,0)="""","""",VLOOKUP($B11,データ!$B:$AB,25,0)))"
ActiveSheet.Protect
End Sub
Sub 記録表初期設定2()
Worksheets("記録表").Activate
ActiveSheet.Unprotect
Range("d11:p11").Formula = _
"=IF($B11="""","""",IF(INDEX(データ!k:k,MATCH($B11,データ!$B:$B,0))="""","""",INDEX(データ!k:k,MATCH($B11,データ!$B:$B,0))))"
Range("t11").Formula = _
"=IF($B11="""","""",IF(INDEX(データ!z:z,MATCH($B11,データ!$B:$B,0))="""","""",INDEX(データ!z:z,MATCH($B11,データ!$B:$B,0))))"
ActiveSheet.Protect
End Sub
No.4ベストアンサー
- 回答日時:
こんにちは
複数セルへの入力は(同じ式を入力する場合は)、ループするよりもご提示の方法の方が効率的だと思います。
T列の式も同じならば、セルのコピペで行った方が簡単ですが、参照列がひとつずれているようなのでそうはいかないようですね。
設定している関数式内にも繰り返しがあるのと、参照列だけ異なる式を設定しているので、その辺りを少し簡略化するならば・・・
(コード上での関数式の視認性は若干悪くなりますけれど)
Const f1 = "INDEX(データ!@1,MATCH($B11,データ!$B:$B,0))"
Const f2 = "=IF($B11="""","""",IF(@2="""","""",@2))"
Range("D11:P11").FormulaLocal = Replace(f2, "@2", Replace(f1, "@1", "K:K"))
Range("T11").FormulaLocal = Replace(f2, "@2", Replace(f1, "@1", "Z:Z"))
みたいなのではいかがでしょうか。
毎回、回答していただきありがとうございましす。何しろマクロは独学ですので理解するに時間がかかってしまいます。Replace(置換)を使用しての簡略化、私には思いつきませんが大変勉強になりました。他のシートにも同じような検索マクロを組んでありますので当てはめて使用させていただきます。
No.6
- 回答日時:
#5です
説明べたで何度もすみません
D列(最初に出力するセルD11)に =COLUMN() を入れると 4 が返ります
=COLUMN() カッコ内は書かれているセルが省略されています
Vlookupで使う列インデックスは10なので+6としました
10が欲しいだけですので COLUMN(J11) とかで10を取得しても良いです
(こちらの方が実数を使わないのでしっくりくるかもです)
また、関数COLUMNに使用しているセルは相対参照なのでE11にコピー(出力)すると右に1つずれてCOLUMN(K11)となり、11が返る仕組みですね
ありがとうございました。COLUMN()+6ですと実際にマクロを実行しますと
D11~P11セルに全く同じ数式が表示されますので戸惑います。COLUMN(J11)
としますと相対参照により1つずれていき変わることがわかりますので説明しやすいです。常にマクロの簡潔に向け取り組んでいますが大変参考になりました。
ループの方法も回答していただきありがとうございました。
No.5
- 回答日時:
COLUMN()+6 少し乱暴だったかな・・・
関数はすでに書かれているので理解されているとして
10のままですと数値は変わらないので、出力先カラムで変化する関数をと思ったのですが、むしろ判り難くなってしまいましたね
COLUMN(J11)とかCOLUMN(J1)と書いた方が良かったかな・・
No.2
- 回答日時:
こんにちは
>結果は同じようになりましたが、ループ,置換方等色々な組み方、表示方法があるのではないかと思います。参考にしたいため他の方法があればお教えください。
確かに
>Sub 記録表初期設定()はこんな感じでも
protect内を書いています
Range("d11:p11").Formula = "=IF($B11="""","""",if(VLOOKUP($B11,データ!$B:$AB,COLUMN()+6,0)="""","""",VLOOKUP($B11,データ!$B:$AB,COLUMN()+6,0)))"
Range("t11").Formula = "=IF($B11="""","""",IF(VLOOKUP($B11,データ!$B:$AB,25,0)="""","""",VLOOKUP($B11,データ!$B:$AB,25,0)))"
関数を残すか否か・・・ループ結果のみ出力(#1様と少し違うループで)
Dim key, r As Range, n As Integer
key = Range("B11")
For Each r In Range("d11:p11,t11")
n = 6
If key <> "" Then
If r.Column = 20 Then n = 5
r.Value = Application.VLookup(key, Worksheets("データ").Range("B:AB"), r.Column + n, 0)
End If
Next
関数を使わず
Dim key, r As Range, n As Integer, fd As Range
key = Range("B11")
For Each r In Range("d11:p11,t11")
n = 5
If key <> "" Then
If r.Column = 20 Then n = 4
Set fd = Worksheets("データ").Range("B:B").Find(What:=key, LookIn:=xlValues, LookAt:=xlWhole)
If Not fd Is Nothing Then r.Value = fd.Offset(, r.Column + n)
End If
Next
などなど・・
No.1
- 回答日時:
Range("d11").Formulaの部分は、
d,e,f,g・・・・と進むので、cellsにすれば列は変数で出来ます。
[cells(n,m):n行m列でn,mは整数]
Range("d11").Formula ⇒ cells(11,4).Formula
Range("e11").Formula ⇒ cells(11,5).Formula
Range("f11").Formula ⇒ cells(11,6).Formula
VLOOKUP($B11,データ!$B:$AB,10,0)も10が変化するので、変数にする
VLOOKUP($B11,データ!$B:$AB," & 変数 & ",0)・・・・
どの変数も整数なので、for文で変数をカウントアップして回せます。
早々にご回答いただきありがとうござい。以前、for文で変数をカウントアップするマクロを組みましたがうまく組めなかったため、再度試みて見ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「未使用」と「不使用」ってど...
-
高速フーリエ変換でデータ数が...
-
3Dプリンターを使う場合 パソコ...
-
Excelの“並び替え”で文字コード...
-
データ用HDDの別のPCへの乗せ替え
-
パレート図等で「N=100」とあ...
-
周波数解析をエクセルツール『...
-
Word2010 差し込み印刷のExcel...
-
Excel Webクエリ
-
プログレッシブとインターレー...
-
時代はSSDなのにネットの最近の...
-
退職者(自分)のグレードや所属...
-
エクセル2010 VBA Date型のグラ...
-
XMLデータってなんですか?
-
FAXの表をエクセルに変換したい
-
三角関数を含んだモデル式での...
-
ワードの差し込み印刷のデータ...
-
日本通信の当月利用データ量は...
-
実行時エラー'1004': アプリケ...
-
印刷キューに表示されるサイズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「未使用」と「不使用」ってど...
-
日本通信の当月利用データ量は...
-
ネットカフェから、メールでき...
-
XMLデータってなんですか?
-
PCの内蔵メモリにデータは残る?
-
高速フーリエ変換でデータ数が...
-
パレート図等で「N=100」とあ...
-
スマホを2台持ってる方をたまに...
-
ZOOMが今後中国にデータを流す...
-
5Gスタンドアローンって、オ...
-
データのレプリカってなんですか?
-
エクセルのグラフのデータ系列...
-
シミュレーション仮説は、仮説...
-
Excel Webクエリ
-
Excelの“並び替え”で文字コード...
-
データ用HDDの別のPCへの乗せ替え
-
Excel ドロップダウンリスト(入...
-
格安simをiPhoneとiPadで共有す...
-
ワードの差し込み印刷のデータ...
-
SSDのフオーマットについて
おすすめ情報
大変申し訳ありませんが「COLUMN()+6」の部分の説明をお願いします。+6はどういうことでしょうか。