エクセルVbaで最終行まで数式をループ入力
- エクセルVba初心者の方が、最終行まで数式をループ入力する方法を学びたいです。
- 今回の質問は、エクセルでの作業をVBAで自動化したいということです。
- 質問者が試したコードにはエラーが出ていますが、どこが間違っているのか教えてほしいです。
- ベストアンサー
エクセルVbaで最終行まで数式をループ入力
よろしくお願いします。エクセルVba初心者です。 エクセルでの作業をvba化したいと思っています。 C列:苗字 D列:名前 E列:E2=$C2&" "&$D2 …これを最終行まで F列:全て数字の1を自動入力 これを Function NameNumber() n = Cells(Rows.Count, "D").End(xlDown).Row Dim Name As Long For Name = 2 To n Cells(Name, "E").FormulaR1C1 "=R[0]C[-2] & R[0]C[-1]" Next Name Dim Number As Long For Number = 2 To n Cells(Number, "F").Value = 1 Next Number End Function と書いてみましたが、348エラーが出てきました。 いろいろ間違っているのかもしれませんが、ご指南いただけますと幸いです。よろしくお願いいたします。
- verite1
- お礼率66% (4/6)
- Visual Basic
- 回答数4
- ありがとう数5
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 あと気が付いたのは、同じループを2回しているので1回にまとめたらいいのではないかと思います。 Function NameNumber() Dim n As Long, name As Long n = Cells(Rows.Count, "D").End(xlUp).Row For name = 2 To n Cells(name, "E").FormulaR1C1 = "=RC3 & "" "" & RC4" Cells(name, "F").Value = 1 Next name End Function
その他の回答 (3)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 戻り値が無いならSubプロシージャでいいのでは? Sub NameNumber() Dim n As Long n = Cells(Rows.Count, "D").End(xlUp).Row With Range("E2:E" & n) .Formula = "=C2&"" ""&D2" .Offset(, 1).Value = 1 End With End Sub
お礼
ありがとうございます。この式が戻り値がない式というところがまだよくわかっておりませんで、これからさらに勉強していきたいと思います。しかしこれが戻り値がない式だということ、With Rangeや .Offsetの書き方など非常に勉強になりました。ご回答ありがとうございます。
- kkkkkm
- ベストアンサー率65% (1623/2463)
No1No2です。蛇足です。 数式をR1C1形式で指定したい場合、実際の数式をセルに記載して(今回の場合はE2に=$C2&" "&$D2と入力)結果が正しいことが確認してください。 その後、マクロの記録を実行してE2をダブルクリックし、数式が表示されたらそのままエンターして、その後記録を終了すると、標準モジュールにR1C1形式の数式が記録されますので、それを実際のコードにコピペしたほうが楽ですし間違いないと思います。 また、変数名はForなどに使う変数はiとか使われることがあります(今回も1回のループで良かったのでしたらFor i=2で良かったとも思えます)が、今回のnなどは一文字ではなくその内容がわかる文字列にした方がいいのではないかと思います。
- kkkkkm
- ベストアンサー率65% (1623/2463)
n = Cells(Rows.Count, "D").End(xlUp).Row と Cells(Name, "E").FormulaR1C1 = "=RC3 & "" "" & RC4" です。 Dim n As Long も最初に付け加えてください。
関連するQ&A
- エクセルVBAについて
前回質問させていただきました件の追加機能になります。以前質問させていただきましたマクロが下記のものです。 Sub TESTa() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("C65536").End(xlUp).Row - 1 For C = 1 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 15) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 6) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 14) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 10) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 13) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("F65536").End(xlUp).Row '0欄の確認 For F = E To 1 Step -1 If Worksheets("Sheet2").Cells(F, 6) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub カウントするとデータ個数がSheet1で約120件になりSheet2においては、4倍になりますので約480件になります。 そこで Sheet1において12件ごとに、Sheet2,3,4...としたいのです。 Sh1 NO.1~12がSheet2 Sh1 NO.13~24がSheet3 ... 10枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。
- 締切済み
- オフィス系ソフト
- エクセル2003のVBAで列を指定
エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub
- ベストアンサー
- その他MS Office製品
- VBA ループ文
お手数ですが、回答お願いします。 VBAでループ文を勉強しております。 最初のfor 文で1000行、1000列に文字を入力、 次のdo 文でその文字を全部消したいのですが、うまくいきません。 またfor 文で1000行、1000列で文字を入力しているのですが、 時間がかかるのは仕方がないことなのでしょうか? お手数ですが、ご教授お願いします。 Sub 文字入力() Dim i As long Dim t As long For i = 1 To 1000 For t = 1 To 1000 Cells(i, t) = "wooo" Next t Next i End Sub ================================================================= Sub 文字入力消し() Dim i As long Dim t As long i = 1 Do t = 1 Do Cells(i, t) = "" t = t + 1 Loop Until Cells(i, t) = "" i = i + 1 Loop Until Cells(i, t) = "" End Sub
- ベストアンサー
- Excel(エクセル)
- ExcelにおけるVBAで、データの振り分けをしたい
Sub a() Dim i As Long Dim s As Long Dim b As Worksheet Dim c As Worksheet Dim maxi As Long Dim maxs As Long Application.ScreenUpdating = False With ThisWorkbook Set b = .Worksheets("bbb") Set c = .Worksheets("ccc") End With maxi = b.Range("A1").CurrentRegion.Rows.Count maxs = c.Range("A1").CurrentRegion.Rows.Count For i = maxi To 2 Step -1 For s = maxs To 2 Step -1 If c.Cells(s, 1) = b.Cells(i, 1) And c.Cells(s, 2) = b.Cells(i, 2) Then c.Cells(s, 14) = b.Cells(i, 3) End If Next s Next i Application.ScreenUpdating = True End Sub ワークシートcとワークシートbの1列目と2列目が一致したときにだけ、cの14列目にbの3列目のデータを代入したく思い、以上のようなコードを書きましたが、重くて終わる様子がありません。 ・そもそもあっているのか、あっていないならどこを修正すればよいか ・早く終わるようにするにはどうしたらいいか アドバイスをよろしくお願いします。
- 締切済み
- Visual Basic
- ExcelのVBAで質問です。
以下のようなシートがあります。 A列 B列 C列 D列 E列 F列 G列 H列 NO 名前 確認 日付1 日付2 確認 日付1 日付2 6行目からデータを入れる予定です。 C列には○印を入力します。 C列~E列までデータが入った行は、 F列~H列まで同じ処理をします。 (セルの背景色を変えます。) 以後同じことを列方向で繰り返します。 以下のようなVBAを組みましたが、 ○の個数を数える部分でエラーがでます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim staff As String Dim kakunin As String Dim date1 As Date Dim date2 As Date Dim i As Long Dim j As Long Dim cnt As Long '100件分ループ For i = 6 To 105 '○の数をカウント cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(i, 2), Cells(i, 256)), "○") 'jとは確認の列番号のこと j = 3 * cnt staff = Cells(i, 2) kakunin = Cells(i, j) date1 = Cells(i, j + 1) date2 = Cells(i, j + 2) 'スタッフ名が入力されたら If staff = "" Then Range(Cells(i, j), Cells(i, j + 50)).Interior.ColorIndex = 15 Else Cells(i, j).Interior.ColorIndex = xlNone '○が入力されたら If kakunin = "○" Then Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = xlNone Else Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = 15 End If If Cells(i, j + 1) <> "" And Cells(i, j + 2) <> "" Then Cells(i, j + 3).Interior.ColorIndex = xlNone End If End If Next i End Sub ご教授いただけたら、幸いです。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- EXCEL VBAのFor...Nextについて
VBA初心者です。よく理解していませんので、質問も的を得ていないかもしれませんが、ご指導宜しくお願いいたします。 現在、For...Nextを使った表計算をしています。 A列に「す」という文字が含まれていたら、B列の「す」の行に「あ」と「い」と「え」「か」のセルの合計をだす。C列、D列・・・最終列まで計算する。 上記VBAを作成する方法を教えて下さい。 A B C D E F G H I J K L 1 2 3 4 5 6 7 8 9 10 11 12 あ 1 2 3 4 5 6 7 8 9 10 11 い 10 20 30 40 50 60 70 80 90 100 110 う 20 30 40 50 60 70 80 90 100 110 120 え 40 50 60 70 80 90 10 20 120 130 30 お 50 60 70 80 90 10 20 30 130 140 40 か 60 70 80 90 10 20 30 40 140 150 50 す 私は表に1~12まで数字をインプットし下記のようなコードを考えました。 Sub 列合計() Dim i, k, l, m, n As Long j = 2 For i = 6 To 120 For k = 6 To 120 For l = 6 To 120 For m = 6 To 120 For n = 6 To 120 If Cells(i, 1) = "す" And Cells(k, 1) = "あ" And Cells(l, 1) = "い" And Cells(m, 1) = "え" And Cells(n, 1) = "か" Then Do While j <= Range("A2").End(xlToRight) Cells(i, j) = Cells(k, j) + Cells(l, j) + Cells(m, j) + Cells(n, j) j = j + 1 Loop Else: End If Next n Next m Next l Next k Next i End Sub この内容だとエラーが出てしまいます。 補足ですが、あいうえおかの順番はかわったり、間に他の行が入ったりします。 また今回はL列の間としましたが、もっと列が増え、最終列まで計算する方法を知りたいのですが、どうぞ宜しくお願い致します。 ※ofice2013です。
- 締切済み
- SE・インフラ・Webエンジニア
- 条件にあてはまるデータの数をカウントするエクセルVBA
下記のようにA列に1~3のコードがありB~E列には測定値があります。 B列以降の測定値のカウント(+3の個数、+2の個数…)を列ごとにVBAでカウントしてます。 A列に関係なくカウントするコードは記述して実行できましたが A列の条件が1の時だけカウントするVBAが良くわかりません。 シート A B C ・・・E 1 -1 +1 ・・・ 1 +2 0 2 0 0 3 -3 0 1 -1 +3 101行目以降 +3 カウント数 … +2 〃 +1 〃 0 〃 -1 〃 -2 〃 -3 〃 A列に関係なくカウントするコード sub カウント() Dim 行 As Long Dim 列 As Long For 列 = 2 To 5 For 行 = 101 To 107 Cells(行, 列).Value = Application.WorksheetFunction.CountIf(Range(Cells(2, 列), Cells(100, 列)), Cells(行, 1)) Next 行 Next 列 End Sub
- ベストアンサー
- Visual Basic
- EXCEL VBA2010 MsgBox
Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。
- ベストアンサー
- Excel(エクセル)
- VBA 最終列に入力された値の表示について
VBAで最終列に入力された値の表示について教えてください。 例えば10行目の10列目(J列)に”123”と入力された値をセル”D1”に表示させたいのですがどのようにすればよいのでしょうか。 A列の最終行については Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Cells(Rows.Count, 1).End(xlUp).Row Range("D1").Value = Cells(r, 1).Value End Sub でうまく表示できたのですが、最終列についてなかなかうまくいきません。 どなたかご指南ください宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel 文字列を区切る VBA 質問
A列にスペース区切りのデータがあります これをC列 D列 に分けて表示したいのですが A列のデータが不規則(個数がバラバラ 空白もある) と、なった場合 なかなか上手くいきません C列以降は使用可能です(空いてます) その道の方 お助けたください 元のVBAは Sub Sample3() Dim i As Long, tmp As Variant For i = 2 To 22 tmp = Split(Cells(i, 1), " ") Cells(i, 2) = tmp(0) Cells(i, 3) = tmp(1) Next i End Sub です お手数ですが宜しく お願いします
- ベストアンサー
- Visual Basic
お礼
ありがとうございました、こちらのコードでうまくいきました!現在の私の知識をもって一番わかりやすい回答をしてくださったのでベストアンサーとさせていただきます。非常に助かりました。