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なんて書いてますか? ADD ME TO MARVEL'S DO NOT EMAIL LIST C

なんて書いてますか?

ADD ME TO MARVEL'S DO NOT EMAIL LIST
CHANGE MY EMAIL PREFERENCES

By entering your email address below, you will be unsubscribed from all future commercial emails from Marvel

Confirm your email address:

Aベストアンサー

ADD ME TO MARVEL'S DO NOT EMAIL LIST
私をMarvelの「メールを送らないリスト」に加えて下さい。

CHANGE MY EMAIL PREFERENCES
私のメールの設定を変更して下さい。

By entering your email address below, you will be unsubscribed from all future commercial emails from Marvel
下の欄にあなたのメールアドレスを入力すると、今後Marvelからの商業メールの送付が全て解除されます。

Confirm your email address:
あなたのメールアドレスを(所定の欄に入力して)ご確認ください。

Q標準モジュールで 『Sub test(ByVal Target As Range)』は動かない?

選択されている複数のアドレスが知りたいので
標準モジュールに
Sub test(ByVal Target As Range)
Debug.Print Target.Address
End Sub
と書きました。

しかしF5ボタンを押しても何も起こりません。
デバッグ→コンパイルをしてもエラーになりません。

シートのイベントプロシージャーではなく
標準モジュールにした理由は
イベント発生時ではなく、任意で起動させたいためです。

ためしに、
Sub test(ByVal Target As Range)
Debug.Print Target.Address
End Sub
の下に、

Sub test2()
Call test
End Sub

と書いたら、
「引数は省略できません。」
というエラーになりました。

何がダメなのかわかりません。
ご教授よろしくお願い致します。

Aベストアンサー

こんばんは。

今回は、初歩的なことですが、段階を経たほうがよいと思います。つまみ食いのようなことをしても、なかなか、VBAもWSHも覚えられないと思います。しかし、今回のように単発では、こちらの書いていることはほとんど分かってもらえないと思います。

今回は、サブルーチンのコードですが、サブルーチンを書くということは、それなりに、その前段階を理解していなくてはなりません。イベント・ドリブン型とは関係がありません。

それと、Target は、予約語ではありませんが、イベント・ドリブン型の引数に使われているものですから、他の語を使ったほうがよいです。それを許していると、自分ですらコードが読めなくなっていくはずです。

今回のようなコードを実際に書くことはありえませんが、ByVal キーワードは、入れるのと入れないのでは違いがありますが、Test1 側で、引数のデータ型が決めてあれば、入れなくても構わないです。Debug.Print としてしまったら、さっぱり、その意味が見えないでしょうけれども……。

F5を押しても、サブルーチンは呼び出さないと動きません。
それに、呼び出す場合は、引数を入れなければなりません。

'-------------------------------------------

Sub Test1()
Dim c As Range  '←これがあるので、ByVal は不要
For Each c In Range("A1:A10")
 Call Test2(c)
Next c
End Sub

'サブルーチン(Target という名称は使わない)
Sub Test2(rng As Range)
  Debug.Print rng.Address
  'Debug.Print では、良く意味が分からないはずです。
  'Range オブジェクトを引数にしたら、いろんな使い方がある
End Sub

'-------------------------------------------

こんばんは。

今回は、初歩的なことですが、段階を経たほうがよいと思います。つまみ食いのようなことをしても、なかなか、VBAもWSHも覚えられないと思います。しかし、今回のように単発では、こちらの書いていることはほとんど分かってもらえないと思います。

今回は、サブルーチンのコードですが、サブルーチンを書くということは、それなりに、その前段階を理解していなくてはなりません。イベント・ドリブン型とは関係がありません。

それと、Target は、予約語ではありませんが、イベント・ドリブン...続きを読む

QTO DO LISTを日本語で言うと?

よくビジネスで、TO DO LISTって使いますよね。
手帳なんかにも出てきますね。

文字通り「やらなければならないことのリスト」という意味であることはわかるのですが、
そういう直訳的・説明的な訳ではない、ひとことでビシッと言い表せる定訳ってありますでしょうか?

ビジネスの現場にあまり詳しくないので、ビジネス関係の方、みなさんどんなふうに言ってらっしゃるか知りたいと思います。
よろしくお願いします。

Aベストアンサー

#1でございます。すこし補足を。


日本国内にはじめてファイロファクスの「システム手帳」が入ってきた時に、今までの日本の手帳にはないまったく新しい概念のリフィルがありました。それが「TO DO LIST」です。

やるべきことを羅列していくだけの用紙ですが、画期的だったのは「チェックマーク」を入れる部分があったことです。

完了したものにはチェックを入れて「済」ということにしておけば一目瞭然であり、チェックの入っていない項目だけを注意して見ていれば良いわけです。

こうしたTODOLISTの「忘れていることが明瞭にわかる」という機能に対して、日本語の備忘(忘れたときのための備え)という意味を重ね合わせて「備忘録」と呼んでいました。

当時のシステム手帳を使い始めた人たちが同様に感じてTODOLISTを「備忘録」と呼んでいたわけで、英訳がどうこうという話ではないのです。

QExcelで05-09-26 13:27を2005年9月26日13時27分と認識させたい

A2セルに「05-09-26 13:27」、A3セルに「05-09-30 9:40」、A4セルに「05-10-01 15:35」の様に日時を表す文字列が入ってずーっと下のセルまで続いています。
今の状態だと単なる文字としてしか認識されませんが、これをExcelが日時として認識できる(セルの書式設定を数値にすればシリアル値で表示される状態)ようにするには、どうすれば良いでしょうか?

Aベストアンサー

こんにちは~

次のようにしてみてください。

・A列をすべて選択
・メニューの「データ」-「区切り位置」
・下の<次へ>を 2回クリックして 3画面目へ
・3画面目の「列のデータ形式」を<日付>にして「完了」で、日付データに変換されます。

QOUTLOOKより軽いスケジューラ(TO DO LIST)

現在、OUTLOOKをスケジュール管理ソフトとして使っていますがかなり重いので他のものを探しています.
SCHEDULE WATCHER がいいときいて試してみたのですが
TO DO LISTの機能で定期的な仕事を入力する機能がないので困っています.
他にお勧めはありませんでしょうか
宜しくお願いいたします.

Aベストアンサー

私も、一時期スケジューラにはまって集めた記憶があります。
そのとき、SCHEDULE WATCHERも使用しました。
いっぱい集めたのですが、Zclock98というソフトも使用しました。
このソフトは、今Zclone98と名前を変えて配布されています。
ダウンロードして試してみてはいかがでしょうか。

(「定期的な仕事」という内容がよくわかりません。もう少し具体的に表記していただけませんか?)

参考URL:http://hp.vector.co.jp/authors/VA002242/zclone98/help_html/index.html

Qエクセル マクロ range と Autofill

こんばんは、エクセルの変数と、オートフィルについて教えて頂けませんか?

D11にあるデータを、オートフィルしてC列の最終行と同じ行までマクロで処理しようと次のようなコードにしてみました。

ですが、残念ながらエラーが出てしまいます。

For i = 7 To Range("C" & Rows.Count).End(xlUp).Row
Range("D" & i).AutoFill Range("D11"), xlFillCopy

これは、どこがいけなかったのでしょうか、そして正しくはどのように書けば良いでしょうか。

詳しい方、教えて頂けませんでしょうか。

よろしくお願いいたします。

Aベストアンサー

#1 です。
すみません。訂正です。
元の式が残っちゃってました。
ループ必要ないですね(汗。


'--------------------------------------------------------------
Sub BBB()

Dim Lstrow As Long
Lstrow = Range("C" & Rows.Count).End(xlUp).Row

Range("D11").AutoFill Destination:=Range("D11:D" & Lstrow), Type:=xlFillCopy

End Sub
'--------------------------------------------------------------

Qto.do.に関して

I have not choise but to do so.
のto do so.が何故to do soなのかわかりません。
to do so.には何の意味があるのでしょうか?
to.do.に対して理解できてません。

Aベストアンサー

前に書いているはずです。
まず、古いイギリス英語なら have not もありますが、
普通は I don't have any choice ~か、I have no choice です。

I have no choice but to do so. で「そうするより仕方がない」

「そうする」とは何かは前に書いているはずです。
これだけの例文なら、そういう前提での文と考えるしかありません。

Qprivate sub にしたらマクロが見えなくな

エクセルの「開発」―「マクロ」をクリックすると、作成したマクロがずらっと並び、見た目が良くなかったのと、他の人が勝手にマクロをいじって壊すミスを防ぐために、PrivateをSubの前に付け足して、見えなくしました。
ところが今度は作ったマクロがどこにあるのかわからなくなってしまい、困っています。良い見つけ方はありますか?

Aベストアンサー

Alt+F11でVBAProjectをツリー表示させる方法はダメなんでしょうか?。

QI'd like to do の過去形は?

「~したい」というときには、"I want to do"と言いますが、polite expression では、"I'd like to do"だということを以前教わって理解していたつもりなのですが、ふと「過去形では何と言うのかな?」という疑問が湧いてきました。

「~したかった」というときの"I want to do"の過去形は、"I wanted to do"だとわかるのですが、"I'd like to do"の過去形はどうやって表せばいいのですか?

"I'd like to do"は"I would like to do"だから、"I would have liked to do"になるのでしょうか?

Aベストアンサー

ご存知と思いますがなかなか英語と日本語は一対一には対応していないため、言い方はその内容により異なってきます。

>「やっと英会話スクールに入りました。前から行きたかったんです。」
という例ならば、普通に want でかまいません。(I've wanted to learn English in ESL classとか色々)
特に丁寧さに掛けるというわけでもありません。
あと、earger とか他の言葉による表現もあります。

なぜかというと、そもそもwantが強い表現で避ける理由は、自分の欲求をあからさまに主張する表現だから、それが実現していないにもかかわらず主張することがあさましい感じがするからなのです。

ですからそれをさけて would like to ~として、自分の欲求自体を仮定法を使って願望に変えているわけです。
つまり暗黙に、[if possible,] I would like to ~ と仮定の中において話しているから、控えめな表現とされるわけです。[]内は言葉にしませんがさまざまな適当な文に置き換えられるわけです。
日本語で言えば、「出来ましたら、~したいのですが、、、」のような表現ということです。

すでに実現した出来事に対して過去の自分の気持ちを言う場合には、would like のような表現は意味を成しません(仮定ではないわけですから)、wantのもつあさましさがあるわけではありません。(すでに実現しているから)

過去にそう思っていただけで現在も実現していないのであれば、仮定法過去をつかう表現にすることでwantのもつ浅ましさを消せるということです。

実現しているのであればwantは特に問題のある表現では無いということです。

ご存知と思いますがなかなか英語と日本語は一対一には対応していないため、言い方はその内容により異なってきます。

>「やっと英会話スクールに入りました。前から行きたかったんです。」
という例ならば、普通に want でかまいません。(I've wanted to learn English in ESL classとか色々)
特に丁寧さに掛けるというわけでもありません。
あと、earger とか他の言葉による表現もあります。

なぜかというと、そもそもwantが強い表現で避ける理由は、自分の欲求をあからさまに主張する表現だから、それが...続きを読む

Qエクセル マクロについて Range と Cells について 

エクセル2003 OSはXP を使っています。
以下のとおり、全く同じコードにも関わらず、前者は動き、後者は動きません。
なお、ClearContents を Clear に変えても Copy に変えても、同様の結果です。
しかし、Cells を使わずに、"A4:C10" 等、番地で直接書くと、後者も動きます。
後者のコードを Cells で動かす方法は無いでしょうか?
また、何故こんな現象がおこるのでしょうか?
なお、シート名などは、間違いありません。
どなたか教えてください。

Sheets("基本データ作成").Range(Cells(3, 3), Cells(qwe, 4)).ClearContents

Sheets("検討データ").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents

Aベストアンサー

コマンドボタンをSheet1に貼りつけた場合。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet2").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
はエラーになりました。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Worksheets("sheet2").Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
で動きました。
明示しないと、Rangeの( )の中のCellsをSheet1のRangeと解釈するので、Sheet2のActiveteと矛盾する。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
もだめでした。
ForNextにしたのは、qweの影響でないと思ったので
変化させました。

コマンドボタンをSheet1に貼りつけた場合。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets(...続きを読む


人気Q&Aランキング