[[20230727165313]] 『変数を使ったVLOOKUPについて』(VLOOKUPマン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『変数を使ったVLOOKUPについて』(VLOOKUPマン)

=VLOOKUP(RC1,Sheet4!C1:C9,19,0)[=VLOOKUP($A2,Sheet4!$A:$H,8,0)]
を変数を使って、挿入したい

Sub Macro1()

    Dim i, j, k, h
    With Worksheets("Sheet1")
            k = 0
            j = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 14 To 71 Step 1
            .Range(.Cells(2, i), .Cells(j, i)) = "=VLOOKUP(RC1,Sheet4!C[-13]:C[-5],8,0)"
            k = k + 0
        Next
    End With
End Sub

上記を実行すると、下記の様に挿入されます。
N列に=VLOOKUP($A2,Sheet4!A:I,8,0)
O列に=VLOOKUP($A2,Sheet4!B:J,8,0)

Sub Macro2()

    Dim i, j, k, h
    With Worksheets("Sheet1")
            k = 0
            j = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 14 To 71 Step 1
        For X = 8 To 80 Step 1
            .Range(.Cells(2, i), .Cells(j, i)) = "=VLOOKUP(RC1,Sheet4!C[-13]:C[-5]," & X & ",0)"
            k = k + 0
           Next
        Next
    End With
End Sub

上記を実行すると、下記の様に挿入されます。
N列に=VLOOKUP($A2,Sheet4!A:I,80,0)
O列に=VLOOKUP($A2,Sheet4!B:J,80,0)

やりたいのは、下記の様に表示される様にしたい
N列に=VLOOKUP($A2,Sheet4!$A:$H,8,0)
O列に=VLOOKUP($A2,Sheet4!$A:$H,9,0)
その為にはどのようにすれば良いでしょうか?
上の式は、ネットで聞いた回答に自分で少し変えてみたのですがレベル不足でできませんでした。

どなたか答えを教えて下さい。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 今回の場合、無理にR1C1形式を使う必要は無いように思います。

    Sub Macro3()
        Dim i As Long, j As Long, x As Long
        x = 8
        With Worksheets("Sheet1")
            j = .Cells(Rows.Count, 1).End(xlUp).Row
            For i = 14 To 71
'                .Range(.Cells(2, i), .Cells(j, i)).FormulaR1C1 = "=VLOOKUP(RC1,Sheet4!C1:C8," & x & ",0)"
                .Range(.Cells(2, i), .Cells(j, i)).Formula = "=VLOOKUP($A2,Sheet4!$A:$H," & x & ",0)"
                x = x + 1
            Next
        End With
    End Sub

    Sub Macro4()
        Dim j As Long
        With Worksheets("Sheet1")
            j = .Cells(Rows.Count, 1).End(xlUp).Row
            .Range(.Cells(2, 14), .Cells(j, 71)).Formula = "=VLOOKUP($A2,Sheet4!$A:$H,Column()-6,0)"
        End With
    End Sub

(酢飯) 2023/07/27(木) 18:32:32


ちょっと確認。
>やりたいのは〜N列に〜O列に〜

↑だとすると↓の目的はなんですか?

 For i = 14 To 71 Step 1

(もこな2 ) 2023/07/27(木) 18:35:16


xyzさんのコメントが消えちゃってますがそのまま投稿しておきます。
おなかいっぱいでしょうが、希望の方が正しければ↓みたいにしてもOKかとおもいます。
   Sub テキトー()
      Dim 最終行 As Long

      With Worksheets("Sheet1")
         最終行 = .Cells(Rows.Count, "A").End(xlUp).Row
         If 最終行 > 1 Then
            .Range("N2:N" & 最終行).Formula = "=VLOOKUP($A2,Sheet4!$A:$H,8,0)"
            .Range("O2:O" & 最終行).Formula = "=VLOOKUP($A2,Sheet4!$A:$H,9,0)"
         End If
      End With
   End Sub

ただ、A〜H列までは【8】列しかないのでO列の数式は変じゃないですか?

(もこな2) 2023/07/27(木) 19:00:08


もこな2 さん、〜N列に〜O列に〜はあくまで説明用のです
実際は、もっとたくさんの列に反映させたいのですが全部書くのが大変なので
(VLOOKUPマン) 2023/07/28(金) 08:57:11

酢飯さん!
ありがとうございます!
Sub Macro4()、こんなカッコいい方法あるんですね!

Sub Macro3もありがとうございます!
どっちも活用させてもらいます
(VLOOKUPマン) 2023/07/28(金) 09:16:00


酢飯さん!

因みに、
Sub Macro4()ですが、これを2つの関数を交互に張り付ける様にするとどのような式になるのでしょうか?
結構、2つや3つや4つを交互にする事が多いので…
(VLOOKUPマン) 2023/07/28(金) 09:26:17


酢飯さん、更にすみません。

Macro4を実行した後に更に値は貼り付けするにはどのような式になるのでしょうか

沢山聞いちゃってすみません。
(VLOOKUPマン) 2023/07/28(金) 09:32:42


お呼びでないようですが何点か。

■1
>〜N列に〜O列に〜はあくまで説明用のです

↑は↓の回答ですよね。

>>〜↓の目的はなんですか?
>> For i = 14 To 71 Step 1

>これを2つの関数を交互に張り付ける
>結構、2つや3つや4つを交互にする事が多いので…

皆さんの(消されてしまったxyzさんのも含めて)コードを見ればわかると思いますが、数式を【一気】に書き込んでいます。
具体的にどのような数式を書き込みたいのか提示されたほうが解決が早いと思います。

 (それを文字列として書き込むだけですから)

その際に、辻褄があってないものを例示されても混乱しますので、必要に応じて補足するとよいとおもいます。
【例】

 "=VLOOKUP($A2,Sheet4!$A:$H,9,0)"
               ~~~~~↑~~~~~~~    
     実際の表範囲は9列以上あり、その9列目を参照するようにしたい

■2
>Macro4を実行した後に更に値は貼り付けするにはどのような式になるのでしょうか
【マクロの記録】で↓の操作をすると参考となるコードが得られます。

 1. (連続する)セル範囲をコピーする
 2. 同じセルに対して【形式を選択して貼り付け】→【値】で貼付する

(もこな2 ) 2023/07/28(金) 12:00:37


 はじめに。
 エクセルの学校質問掲示板は、誰もが閲覧・書き込みできるようにWebマスターが提供なされている場所です。
 私の考えでは、そのような場所で特定の回答者を指名するような書き込みは好ましくないですし、
 質問者さんも、他の回答者からの有用な回答をもらう機会を損失する可能性もあり、互いに益がありません。
 今後、その様な行為は控えて頂きますようお願い致します。
 また、あまり好ましくない状況にも関わらず書込み下さった、もこな2さんにお礼申し上げます。

 Macro3について
 For〜Next Step1で、変数xが1ずつ増加するということは理解されていると感じましたが、
 二重ループになっているので、思った結果になっていません。
 ループ処理の中で、x=x+1とすることで、変数xを1ずつ増加させることができますよ、という意図で書きました。

 Macro4について
 提示された数式なら、数式を工夫すれば、変数もループも必要ないよ、という事を示すつもりで書きました。
 >これを2つの関数を交互に張り付ける様にするとどのような式になるのでしょうか?
 どうも汎用的な構文をご希望されている感がありますが、求める結果で数式の内容を工夫して対応できたりする場合もあるので、
 既に指摘のある様に、具体的な数式を提示されないと、なんとも答えようがありません。
 全く関連性のない数式を2列、3列とするのであれば、それこそFor〜Nextでのループでも良いのでは。
    For i = 1 To 10 Step 3
        Cells(1, i) = "数式A"
        Cells(1, i + 1) = "数式B"
        Cells(1, i + 2) = "数式C"
    Next

 >Macro4を実行した後に更に値は貼り付けするにはどのような式になるのでしょうか
 もこな2さんの回答を実践されたら「値貼り付け」のコードを得られますし、
 別案を挙げるなら、
    With セル範囲
        .Formula = "数式"
        .Value = .Value
    End With
 のように、ValueプロパティにValueプロパティを代入する方法でも、
 値貼り付けと同様な結果になると思います。
(酢飯) 2023/07/28(金) 17:59:38

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.