Sub test1()
With Range("G2:G13")
  .Formula = "=VLOOKUP(A2&""_""&E2,data貼り付け!A:L,8,FALSE)"
 End With
End Sub
上記のようにG2からG13まで(12行)VLOOKUP関数を入力という処理をしています
この処理が終わったら2行下(G15)に移動し、G15~G26(12行)まで上記の関数を貼り付ける
というものを4459行目まで繰り返したいのです。

こちらは初心者ですので何卒お願い致します

このQ&Aに関連する最新のQ&A

A 回答 (6件)

No.2・3です。



たびたびごめんなさい。
もっと簡単な数式で大丈夫です。
前回のコードは消去し
↓のコードに変更してください。

Sub Sample2()
Dim i As Long, myRng As Range, wS As Worksheet
Set wS = Worksheets("data貼り付け")
Set myRng = Range("G2").Resize(12)
For i = 2 To 4448 Step 13
If myRng Is Nothing Then
Set myRng = Cells(i, "G").Resize(12)
Else
Set myRng = Union(myRng, Cells(i, "G").Resize(12))
End If
Next i
myRng.Formula = "=VLOOKUP(A2&""_""&E2,data貼り付け!A:L,8,FALSE)"
End Sub

どうも失礼しました。m(_ _)m
    • good
    • 0

No.1です。

回答も出てきたようなので
Sub test5()
   Dim i As Long
   For i = 2 To 4448 Step 13
       Range("G" & i & ":G" & i + 11).FormulaR1C1 = _
       "=VLOOKUP(RC[-6]&""_""&RC[-2],data貼り付け!C[-6]:C[5],8,FALSE)"
   Next
End Sub

とか

Sub test6()
   Dim i As Long
   Dim Rng As Range
   Set Rng = Range("G2:G13")
   For i = 15 To 4448 Step 13
   Set Rng = Union(Rng, Range("G" & i & ":G" & i + 11))
   Next
   Rng.FormulaR1C1 = _
       "=VLOOKUP(RC[-6]&""_""&RC[-2],data貼り付け!C[-6]:C[5],8,FALSE)"
End Sub
    • good
    • 0

ループで行うなら下記test1のようになると思います。

VLOOKUPの式にも手を入れないと正しい結果が得られないので、呪文のようになってしまいます。
ループに拘らなければ、test2でもできます。G2:G14を範囲選択して、G4459までオートフィルするイメージです。

Sub test1()
Dim i As Long
For i = 2 To 4448 Step 13
With Range("G" & i & ":G" & i + 11) '←i=2の場合、"G2:G13"になります。
.Formula = "=VLOOKUP(A" & i & "& ""_""&" & "E" & i & ",data貼り付け!A:L,8,FALSE)"
End With
Next i
End Sub

Sub test2()
With Range("G2:G13")
.Formula = "=VLOOKUP(A2&""_""&E2,data貼り付け!A:L,8,FALSE)"
End With
Range("G2:G14").AutoFill Destination:=Range("G2:G4459"), Type:=xlFillDefault
End Sub
    • good
    • 0

No.2です。



投稿後気づきました。
コード内の
>myRng.Select
の行は不要でした。
消去してください。
(確認の意味で入れていただけです)m(_ _)m
    • good
    • 0

こんにちは!



G列には計算結果ではなく、数式を残したいのですね?
一例です。

Sub Sample1()
Dim i As Long, myRng As Range
Set myRng = Range("G2").Resize(12)
For i = 15 To 4448 Step 13
Set myRng = Union(myRng, Cells(i, "G").Resize(12))
Next i
myRng.Formula = "=VLOOKUP(INDIRECT(""A""&ROW())&""_""&INDIRECT(""E""&ROW()),data貼り付け!A:H,8,False)"
myRng.Select
End Sub

※ VLOOKUP関数の入れ子に他の関数が入っていますが、
結果としてはVLOOKUP関数がそのまま入っています。

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

G14,G27,G40・・・G4447セルはすべて何か入力されているのですか?


入力されていないなら、後から消す方が処理が早そうです
すべて入力されているなら、入力されていないセルを選択して
入力させれば良いので、
繰り返し構文が必要なさそうです。
数式の入力が目的ではなく、質問のような繰り返し構文を勉強したいのでしょうか
FOR i=2 to 4448 step 13
みたいな
http://excelvba.pc-users.net/fol6/6_3.html
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

QExcelVBA With~End With構文でまとめられない??

すみませんがご教示いただければ幸いです。
セル範囲を選択させ、情報を得てから作業するのですが、コードにたくさんSelection(すべて同じ選択範囲)が出てくるのでWith~End Withでまとめようと思いました。
ところが、まとめてもSelectionという表記を省略できたのはほんのわずかです。
ご覧の通り、TypeName(Selection) をはじめIntersect(Selection(1), 等々省略できないのがほとんどです。
Set myRng=Selection でやったとしても、SelectionがmyRngに変わるだけでぜんぜん省略にならないですよね?
こんな場合は何か別の省略した書き方があるのでしょうか?

Sub test()
With Selection
If TypeName(Selection) <> "Range" Then 'セル以外をセレクトしてたら
MsgBox "セル範囲を選択してください。", vbCritical, " Σ( ̄ロ ̄lll)"
Exit Sub
End If
If Intersect(Selection(1), Range("D4:AY65")) Is Nothing _
Or Intersect(Selection(.Count), Range("D4:AY65")) Is Nothing Then '指定のセル範囲をはみ出てたら
ans = MsgBox("はみ出してますがいいんですか?", vbYesNo + vbQuestion, " ( ̄□ ̄; ? ")
If ans = vbNo Then
Exit Sub
End If
End If
For Each Ln In ActiveSheet.Lines '配置された各直線につき
If Not Intersect(Range(Ln.TopLeftCell, Ln.BottomRightCell.Offset(0, -1)), Selection) Is Nothing Then '選択範囲とかぶってたら
MsgBox "重複してます!", vbCritical, " ( ̄□ ̄;)!! "
Exit Sub
End If
Next
End With
'以下、無関係なので略します。
End Sub

すみませんがご教示いただければ幸いです。
セル範囲を選択させ、情報を得てから作業するのですが、コードにたくさんSelection(すべて同じ選択範囲)が出てくるのでWith~End Withでまとめようと思いました。
ところが、まとめてもSelectionという表記を省略できたのはほんのわずかです。
ご覧の通り、TypeName(Selection) をはじめIntersect(Selection(1), 等々省略できないのがほとんどです。
Set myRng=Selection でやったとしても、SelectionがmyRngに変わるだけでぜんぜん省略にならないですよね?
...続きを読む

Aベストアンサー

こんばんは。

結論からすると、With Selection ~ End With の必要性は、あまり出てきませんね。
Selection というスタイル自体が特殊ですから、まとめても不恰好になってしまいます。

With Selection というのは、Excel では、あまり品番に出てこないように思います。
こういう書法の原則というのは、文字数を減らすということなのだと私は解釈しています。だから、一応、以下は、その目的自体は達成はしているように思います。

TypeName の部分は除いて、「はみ出してます」に関してのみ、少し考えてみました。まずは、参考まで。


Sub TestSample1()
  Dim r As Range
  Set r = Range("D4:AY65")
  ''--TypeName は省略--
  With Selection
    If .Areas.Count > 1 Then
       MsgBox "複数の範囲を選択しています。ひとつにしてください。"
       Exit Sub
    End If
    If Not Intersect(.Cells, r) Is Nothing Then
      If (.Cells(1).Row >= r(1).Row And .Cells(.Cells.Count).Row <= r.Cells(r.Count).Row) And _
        (.Cells(1).Column >= r(1).Column And .Cells(.Cells.Count).Column <= r.Cells(r.Count).Column) Then
        MsgBox "範囲内に入っています。"
      Else
        MsgBox "範囲からはみ出ています。"
      End If
    Else
      MsgBox "範囲外です。"
    End If
  End With
End Sub

こんばんは。

結論からすると、With Selection ~ End With の必要性は、あまり出てきませんね。
Selection というスタイル自体が特殊ですから、まとめても不恰好になってしまいます。

With Selection というのは、Excel では、あまり品番に出てこないように思います。
こういう書法の原則というのは、文字数を減らすということなのだと私は解釈しています。だから、一応、以下は、その目的自体は達成はしているように思います。

TypeName の部分は除いて、「はみ出してます」に関してのみ、少し考えて...続きを読む

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

QIF,VLOOKUP,COLUMNの関数を理解している人

助けてください。
このジャンルは初めてなので自信ありませんが・・
まず平均点を求める場合、少数第一位まで表示する方法を、教えてください。
次にセルに番号を入力すると該当する学生の個人成績が表示されるようします。セルC4から14までが番号で、数学の点数がE4から14までと、5教科あります。英語はF4 から14とだんだんの仕組みで点数は仮定して求めてください。単純でいいです。加えて評価は90点がA、80がB、70、60、0がC・D・Eとなります。
セルC30に氏名が入りH30まで5教科の個人点数が入ります。関数としては、タイトルの関数をしようします。あえてこのような形にしたのは、数式を教えて欲しいからではないからです。この関数を使う場合、どのセルを選択して入力するのかを知りたいからです。非常に特殊かつ分かりにくいと思います。指摘されたら補足させて頂きます。
直ぐにできるとは、思いません。それでもパソコン・エクセル関数得意だよという助けを期待しています。

Aベストアンサー

初めての質問らいいが、今尾もあるので、質問の書き方に着いて要望する。
>IF,VLOOKUP,COLUMNの関数を理解している人
標題としてこんな書き方は無いでしょう。こんな関数など理解できている人はゴマンと居る。一般的なケースではエクセルを使う人の常識の関数。
また標題として、内容を示していないのが問題。
ーー
質問の仕方ー例の挙げ方、について
>セルC4から14までが番号
こういう場合は行数が多いので、少なくします。自分の場合のそのままは質問に書かないこと。簡素化して、回答を納得した後、自分の場合に翻案すること。
科目も2,3科目にすること。数を多く書いても解答の本質に影響しないことがほとんど。
A列 C列  E列  F列
氏名 番号 数学 英語
安田 1  56 75 
山本 2  64 72
木下 3  73 64
塚田 4  83 56
>C30に氏名が入りH30まで5教科の個人点数が入ります
C30 D列  E列  F列
氏名 番号 数学 英語
安田 ?  ?  ?
こういうようにシートの形式をなるべく生かして書くこと。
模擬実例数は5から10ぐらいにする。
以上見本を挙げてみた。
>仮定して求めてください
これは何?
データは何でもいいから読者が考え理めろということか。
質問している立場なのだから、丁寧に労を惜しまず例の数字ぐらい書くこと。
>数式を教えて欲しいからではないからです。この関数を使う場合、どのセルを選択して入力するのかを知りたいからです
こんなの普通は質問者が決める(ニーズで決まる)物だと思うが。
1意的な氏名か、番号でしょう。点数などは同点の可能性がある。
VLOOKUPでは56点の人というのは複ヅウあると抽出できない。
同姓同名の問題は別にしておく。
>どのセルを選択して入力するのかを知りたいからです
VLOOKUPは検索値(例えば氏名で引く場合)氏名より右の列にあるデータしか引いてこれないという制約があるが。
>どのセルを選択して入力するのか・・
何を中心に関連データを採り(知り)たいのかによるのでは。
ーー
>まず平均点を求める場合、少数第一位まで表示する方法を、教えてください。
Round関数ほか2,3あるが。

初めての質問らいいが、今尾もあるので、質問の書き方に着いて要望する。
>IF,VLOOKUP,COLUMNの関数を理解している人
標題としてこんな書き方は無いでしょう。こんな関数など理解できている人はゴマンと居る。一般的なケースではエクセルを使う人の常識の関数。
また標題として、内容を示していないのが問題。
ーー
質問の仕方ー例の挙げ方、について
>セルC4から14までが番号
こういう場合は行数が多いので、少なくします。自分の場合のそのままは質問に書かないこと。簡素化して、回答を納得した後...続きを読む

QExcel VBA Formula, FormulaR1C1 プロパティについて

こんばんは

Excel VBAで 「数式」の貼り付け相当のことを行おうとした際、
pastespecial ではなく代入で実施しようとしましたが思った通りになりませんでした。
修正した結果、とりあえずの目的は達成できたのですが、
・下記コード「A」のFormulaR1C1プロパティで代入される結果がなぜそうなるのかよく分からない
 ⇒ F5=RC[-5] ならわかる。なぜ=R[1]C[-5]になるのか?
・代入の構文を使用し、一文でPastespecial相当のことをする方法はないか

ご教示願います。

'実験コード-----------------------------------
’A1~A10 に1~10の数字
’B1~G1にはすべて "=A1"
'12~20行目のデータは参考として2~10に実際に入っている数式を
'Formulatext関数を利用して、A1形式、R1C1形式で記載しています。

Sub test()
Range("B2").Formula = Range("B1").Formula
Range("C2:D2").Formula = Range("C1").Formula

Range("B4:B6").Formula = Range("B1").Formula
Range("C4:D6").Formula = Range("C1:D1").Formula

Range("B8:D10").Formula = Range("B1").Formula

'------------------------------------------------------------
Range("E2").FormulaR1C1 = Range("E1").FormulaR1C1
Range("F2:G2").FormulaR1C1 = Range("F1").FormulaR1C1

Range("E4:E6").FormulaR1C1 = Range("E1").FormulaR1C1
Range("F4:G6").FormulaR1C1 = Range("F1:G1").FormulaR1C1 ’---A

Range("E8:G10").FormulaR1C1 = Range("E1").FormulaR1C1
End Sub

こんばんは

Excel VBAで 「数式」の貼り付け相当のことを行おうとした際、
pastespecial ではなく代入で実施しようとしましたが思った通りになりませんでした。
修正した結果、とりあえずの目的は達成できたのですが、
・下記コード「A」のFormulaR1C1プロパティで代入される結果がなぜそうなるのかよく分からない
 ⇒ F5=RC[-5] ならわかる。なぜ=R[1]C[-5]になるのか?
・代入の構文を使用し、一文でPastespecial相当のことをする方法はないか

ご教示願います。

'実験コード--------------------...続きを読む

Aベストアンサー

こんばんは。

>⇒ F5=RC[-5] ならわかる。なぜ=R[1]C[-5]になるのか?

>Range("F4:G6").FormulaR1C1 = Range("F1:G1").FormulaR1C1 ’---A
たぶん、Range型で、相対参照になっているから、F1 の位置を平行移動して、F4の位置に見立てて、それぞれのセルの位置関係から、組み直されるというぐらいしか説明できません。

私自身、長く、R1C1型は使ってきたけれども、少なくとも、VBAとしては、一番、敬遠する使い方かもしれません。理屈抜きで、そのような数式の代入は絶対にしないということですね。

VBAは、VBAの一般的な方法で処理していきます。

どういう数式を入れるかにもよりますが、

例えば、
[F4]に、A4のセルの値を出し、[G4]に、B4のセルの値を出す
[F5]に、A5のセルの値を出し、[G5]に、B5のセルの値を出す
ならば、
まず、R1C1方式で考えて、
行は同じだから、R (同じ行という意味)
F4は、 =RC[-5], G4 は、同じ =RC[-5]

だから、数式代入の右辺は、必ずテキスト型の数式になります。

Sub FormulaEnter()
  Range("F4:G6").FormulaLocal = "=RC[-5]"
End Sub

となるわけです。なぜ、FormulaLocal を使うかというと、日本固有の表記の混ざる関数などがある可能性があるからです。例えば、元号の年とか。

こんばんは。

>⇒ F5=RC[-5] ならわかる。なぜ=R[1]C[-5]になるのか?

>Range("F4:G6").FormulaR1C1 = Range("F1:G1").FormulaR1C1 ’---A
たぶん、Range型で、相対参照になっているから、F1 の位置を平行移動して、F4の位置に見立てて、それぞれのセルの位置関係から、組み直されるというぐらいしか説明できません。

私自身、長く、R1C1型は使ってきたけれども、少なくとも、VBAとしては、一番、敬遠する使い方かもしれません。理屈抜きで、そのような数式の代入は絶対にしないということですね。

VBAは、VBA...続きを読む


人気Q&Aランキング

おすすめ情報