
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
マクロか関数で処理したいのですが、教えて頂けませんか。
Excel(エクセル)
-
Excelで数式をそのままコピーしたい どうすればいいですか?
Excel(エクセル)
-
Countifよりも早く重複数をカウントする方法ありますか?
Excel(エクセル)
-
4
マクロのコードを、少しでも削って短くしたい
Excel(エクセル)
-
5
【EXCEL】=セル&セルが上手く表示できない。
Excel(エクセル)
-
6
エクセルのデータの抽出について
Excel(エクセル)
-
7
excelの数式の書き方について。 以下のような数式をSheet1に書いています。 Sheet1のB
Excel(エクセル)
-
8
エクセルデーターの並び替え
Excel(エクセル)
-
9
記録マクロのみでできますか?
Excel(エクセル)
-
10
ExcelのVBAでシフト表を作っていますが、バグが出て困っています
Visual Basic(VBA)
-
11
表示形式、文字列セル(列)に数式を入力するには マクロ
Excel(エクセル)
-
12
エクセル、日々の集計整理方法。(再送です。)
Excel(エクセル)
-
13
VBA エラーの件
Excel(エクセル)
-
14
VBAで、㉑という数値が、正しく、入力できない
Excel(エクセル)
-
15
Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。
Excel(エクセル)
-
16
エクセルVBA 特殊フォルダのパスを取得の方法を教えてください
Excel(エクセル)
-
17
エクセル VBA For Next 繰り返しの書き方を教えてください
Excel(エクセル)
-
18
Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい
Excel(エクセル)
-
19
EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約
Excel(エクセル)
-
20
Excelでこんなことはできないでしょうか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
格安simをiPhoneとiPadで共有す...
-
5
エクセルのグラフのデータ系列...
-
6
標準偏差の計算方法:「n」と「...
-
7
ネットカフェから、メールでき...
-
8
ワードの差し込み印刷のデータ...
-
9
FAXの表をエクセルに変換したい
-
10
PCの内蔵メモリにデータは残る?
-
11
Excel グラフで数値の正と負の...
-
12
【エクセル】測定時間がバラバ...
-
13
Excelの“並び替え”で文字コード...
-
14
携帯電話のデータを消去され、...
-
15
フーリエ変換のデータの補間に...
-
16
Music カウントフリーなのに、P...
-
17
mp3プレーヤーに曲を入れる方法...
-
18
1GB(ギガバイト)って、何g(グラ...
-
19
データ用HDDの別のPCへの乗せ替え
-
20
シリアルRS-232出力機器からの...
おすすめ情報
公式facebook
公式twitter
大変申し訳ありませんが「COLUMN()+6」の部分の説明をお願いします。+6はどういうことでしょうか。