コードがうまく作れません

このQ&Aのポイント
  • 「コードがうまく作れません」というエラーが発生しています。
  • 問題のコードを見ると、iの値に一致するセルをAK列のセルから探し出し、一致したら同じ行のセルBA列の値を合計します。
  • しかし、実行すると合計が全て0になってしまいます。どうすれば良いかご指導をお願いします。
回答を見る
  • ベストアンサー

コードがうまく作れません

iの値に一致するセルをAK列のセルから探し出し、一致したら同じ行のセルBA列の値を合計します。iの合計が出たらワークシート2にiの値と合計をセルに貼り付けます。 次にiの値を1増やしてまた同じセルを探し出し、合計を出してワークシートの下の行のセルへ貼り付けます。 これで実行すると合計が全て0になります。どうかご指導をお願いします。 Sub sou() Dim h, count, goukei, i, e, f h = 1 e = 1 f = 1 count = 0 goukei = 0 Worksheets("Sheet1").Activate Worksheets("Sheet2").Activate For i = 12345 To 45787 For h = 1 To Cells(Rows.count, "AK").End(xlUp).Row If i = Cells(h, "AK") Then count = Cells(h, "BA") goukei = count + goukei End If Next h Worksheets("sheet2").Cells(e, "A") = i Worksheets("sheet2").Cells(f, "B") = goukei e = e + 1 f = f + 1 Next i End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • googoo900
  • ベストアンサー率44% (82/184)
回答No.2

>これで実行すると合計が全て0になります。 これは、9行目でシート2をアクティベートしているため、それ以降すべてシート2を参照しています。 おそらくシート2にはデータがないので、合計はゼロになってしまいます。 コードは以下のようになります。tokotoko99321さんのコードをベースに改造して特にむずかしい構文は使っていません。 ※tokotoko99321さんが作られていたようにすべてのiに対してシート2に書き出すようにしています。 iの値に一致する場合のみシート2に抜き出す場合には、コード中のコメントにも書いているとおり、行頭の『'』マークを2ヶ所削除してその行が実行されるようにしてください。 Sub sou() Dim h, i, e, f, endrow As Integer Dim count, goukei h = 1 e = 1 f = 1 count = 0 goukei = 0 Worksheets("Sheet1").Activate endrow = Cells(Rows.count, "AK").End(xlUp).Row For i = 12345 To 45787 For h = 1 To endrow If i = Cells(h, "AK") Then count = Cells(h, "BA") goukei = count + goukei End If Next h 'If goukei <> 0 Then 'iの値に一致するものがない場合はシート2に書き込まないのであれば、行頭の『'』を削除する Worksheets("sheet2").Cells(e, "A") = i Worksheets("sheet2").Cells(e, "B") = goukei e = e + 1 'End If 'iの値に一致するものがない場合はシート2に書き込まないのであれば、行頭の『'』を削除する goukei = 0 Next i End Sub

tokotoko99321
質問者

お礼

丁寧に教えてくださりありがとうございます。ベストアンサーとさせていただきます。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>これで実行すると合計が全て0になります。 なぜ0になるのか説明は無ですか? Sub sou()   Dim i As Long, h As Long, e As Long, goukei As Long   Dim flg As Boolean   With Worksheets("Sheet1")     For i = 12345 To 45787       For h = 1 To .Cells(Rows.count, "AK").End(xlUp).Row         If i = .Cells(h, "AK").Value Then           goukei = goukei + Cells(h, "BA").Value           flg = True         End If       Next h       If flg = True Then         e = e + 1         Worksheets("sheet2").Cells(e, "A").Value = i         Worksheets("sheet2").Cells(e, "B").Value = goukei         goukei = 0         flg = False       End If     Next i   End With End Sub

関連するQ&A

  • Excelマクロのことで教えて下さい

    初歩的なことですみません。 E列の値をF列に値を入れるために下記のマクロを組みました。 Sub test() Worksheets("Sheet1").Select Dim i As Long For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row Range("F2").Value = "=E2/1024/1024" Cells(i, 6).FillDown Range(Cells(2, 6), Cells(i, 6)).Copy Range("F2").PasteSpecial Paste:=xlValues Next i End Sub ところがF列に「値のみを貼り付け」をした時に、途中から同じ値のみがコピーされてしまい困っています。 (画像参照) うまく貼り付けることができるマクロをお教え下さい。 よろしくお願いいたします。

  • VBAの複数条件分岐について

    VBAで下記の構文を使用してシート1にある表より 条件に合致するもののみシート2に抽出するようにしています。 現在はシート1のE2セルの値がシート1のB列の値と比較して 該当するものを抽出しています。 この条件が、 シート1のE1のセルの値が20より小さい場合、 かつE2のセルの値がシート1のB列の値と比較して該当するものを シート1に貼り付け、 シート1のE1のセルの値が20以上の場合、 かつE2のセルの値がシート1のD列の値と比較して該当するものを シート1に貼り付ける というような条件に変えたいのですが どのように変更したらよろしいのでしょうか。 よろしくご教授下さい。 ちなみに現在使用している構文です。 これもきれいな構文かはわからないのですが・・・ Sub test() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") k = 1 sh2.Cells(k, "B") = sh1.Cells(1, "A") sh2.Cells(k, "C") = sh1.Cells(1, "B") k = k + 1 d = sh1.Range("A65536").End(xlUp).Row For i = 2 To d If sh1.Cells(i, "B") <= sh1.Range("E2") Then sh2.Cells(k, "B") = sh1.Cells(i, "A") sh2.Cells(k, "C") = sh1.Cells(i, "B") k = k + 1 End If Next i sh2.Activate End Sub

  • Excel VBAシートの同一番地のセルのリスト化

    別々のシートの同一番地のセルの値をリスト化するのにこのようなVBAを見つけました。 シートは追加せず、既存のシートを指定したくて、色々と書き換えをチャレンジしましたがうまくいきません。 既存のシートを指定し、この作業を行うにはどうしたらよいのでしょうか? ご教示いただけますと幸甚です。 Sub Test1() Dim TmpSheet As Worksheet, i As Integer i = Worksheets.Count Set TmpSheet = Worksheets.Add(After:=Sheets(Sheets.Count)) With TmpSheet For i = 1 To i .Cells(i, 1).Value = Worksheets(i).Name .Cells(i, 2).Value = Worksheets(i).Range("E5").Value Next End With End Sub

  • エクセル2000のマクロにおける、複数シート間のコピー&ペーストについて

    閲覧ありがとうございます。 現在、エクセル2000(OS、WIN2KPRO)を用いて、以下のような仕様のマクロを組もうとしています。 1.Sheet1のCommandButton1から実行する。 2.Sheet2のA1セルから、O?セルまでのデータの入っているセルをコピーし、Sheet1のB4セル以下にペーストする。 3.O?セルの?は1000以下の値で変化する。 4.Sheet2のF列には、ユニークキーが入力される為、必ず値が入力されている。 上記の仕様に従い、以下のようなマクロを組みましたが、 > Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Select のラインでエラーが発生します。 激しく独学の為、汚いソースですみません^^; **************************************** Private Sub CommandButton1_Click() Worksheets("Sheet2").Select Worksheets("Sheet2").Activate Dim Line_Num Line_Num = 1000 - WorksheetFunction.CountBlank(Range("F1:F1000")) Worksheets("Sheet2").Range("A1").Select Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Select Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Copy Worksheets("Sheet1").Select Worksheets("Sheet1").Activate Range("B4").Select ActiveSheet.Paste End Sub

  • VBAでセルをダブルクリックとEnterを押す方法

    VBAでExcelのセルB2~B11までをダブルクリック&Enterを押す繰り返す処理をしたいので、次のようなコードでやってみましたが、セルB11~B20をダブルクリック&Enterを押す結果となりました。どう修正したらB2~B11までをダブルクリック&Enterを押す繰り返す処理になるのか教えてください。よろしくお願いいたします。 ************************************************************* Sub 編集状態とEnter() Dim i Worksheets("Sheet1").Activate For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row Cells(i, 2).Activate SendKeys "{F2}" & "{Enter}" Next End Sub *************************************************************

  • コードの、どこが間違ってますか?

    下記は、選択した1つのシートだけしか、実行されませんが、どこが間違ってますか? よろしくお願い致します。 ---- Sub 不要な行を削除する() Dim i As Integer On Error Resume Next For i = 9 To Worksheets.Count Worksheets(i).Range(Cells(4, 6).End(xlDown).Offset(2, 0).EntireRow, Cells(4, 6).End(xlDown).Offset(12, 0).EntireRow).Select Selection.Delete Shift:=xlUp Next i  End Sub ----

  • VBA 任意のシートからコピーを始める。

    教えてください。 全てのシートをコピーして一つのシートにまとめるプログラムシートを作成しました。 1番目のシートからコピーを始める場合は For i = 2 To Worksheets.Count 2番目のシートからコピーを始める場合は For i = 3 To Worksheets.Count とすればよいのですがこれだといちいちモジュールコードを出して数字を変更しなければならず面倒です。 そこでユーザーフォームのコンボボックスに任意の数字を入れてクリックを押せば希望するシートからコピーを始めるプログラムを作成してみましたがうまくいきません。どなたか教えてくださいませんか。 Sub matome() Dim i As Integer Dim lRow As Long, lCol As Long, lRow2 As Long, lRow3 As Long, SNo As Integer '----何番目からコピーを始めるかを決定します With UserForm2 SNo = .ComboBox1.value End With For i = 1 + SNo To Worksheets.Count With Worksheets(i) lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 lCol = .Cells(1, Columns.Count).End(xlToLeft).Column '----シートのデータが2行以上の場合にコピーします If lRow >= 2 Then lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 If lRow2 < Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 Then lRow2 = Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1) End If End With Next i

  • VBA セルの削除

    開いているブック全てに対して、セルを削除するマクロを組んだのですが、うまく動作しません。 1. ブックのsheet1にてセルB2~B100の中で、値があるセルを特定 値の入ったセルがあれば、その値と同じ名前のシートが存在する 例) B2:値 1-A、シート名: 1-A B3:値 2-A、シート名: 2-A ... 2. 特定した値と同じ名前のシートをアクティブにする 3. そのシートにて「セルA1がブランクでない かつ セルB1の値がゼロ」と条件をかける 4. trueであれば、sheet1にて特定したセルへ戻る 5. 特定したセルとその右隣のセルを削除(上シフト) 6. 1.~5.を、sheet1のセルB2以降、値がブランクになるまで繰り返す 次の通り構文を作成、エラーなく実行できるのですが、結果は5.までしか処理されず、他のブックに対しても処理が走っていません。 格納した変数に問題がありそうなのですが、解決できず困っています。 Sub test() Dim WBK As Workbook For Each WBK In Workbooks If WBK.Name <> ThisWorkbook.Name Then WBK.Activate For i = 2 To 100 touroku = WBK.Worksheets("sheet1").Cells(i, 2).Value If WBK.Worksheets("sheet1").Cells(i, 2).Value <> "" Then WBK.Worksheets(touroku).Activate If ActiveSheet.Cells(1, 1) <> "" And ActiveSheet.Cells(2, 1).Value = 0 Then WBK.Worksheets("sheet1").Cells(i, 2).Resize(1, 2).Delete End If End If Next i WBK.Save End If Next WBK End Sub まだVBA初めて1ヶ月ほどで、基礎が理解できてきた程度なのですが、急ぎ完成させたいマクロなのでお力を貸してください。 よろしくお願いいたします。

  • VBA エクセル 合計

    皆様、こんにちは。 それぞれの値が入っている会計シート(シートの形式は同じ)を一つの合計シートに合計しようとしていますが、うまくいきません。具体的に、数値の合計ができません。 例えば、ある項目に対して、シートAに100が入力され、シートBには230が入力されているとすれば、合計シートに100+230=330を入力したいです。なお、全ての会計シートは"Form"というエクセルシートにあり、その数をユーザが決めますので、検索しなければいけません。そして、合計シートは"Result"にあります。 以下のように書いてみましたが、間違っているようです。 Worksheets("Result").Activate Dim SR As Integer Dim SC As Integer 'SR is start row 'SC is start column SR = 6 SC = 2 Worksheets("Form").Activate Dim i As Integer i = 68 Do While 1 = 1 If Selection.Cells(i, 4).Value = "" Then Exit Do End If i = i + 49 Loop Sum = 0 Sum = Sum + Selection.Cells(i, 4) Worksheets("Result").Activate Cells(SR + 5, SC + 2) = Sum 詳しい方に教えていただければ非常に助かります。 どうぞよろしくお願いします。

  • Excel 2007 マクロ 別シートの情報を反映する方法

    Excel 2007 マクロ 別シートの情報を反映する方法 Sheet1とSheet2があります。 Sheet1のD列とSheet2のM列で同じ値があれば、 Sheet1のE列の値をSheet2のN列に反映するマクロを 作成しました。 下記が正しいと思っていたのですが、エラーメッセージは出ずに 値が反映されません。 マクロに問題点があればご指摘ください。 よろしくお願いいたします。 Sub Rist() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") For i = 2 To ws1.Cells(Rows.Count, "D").End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, "M").End(xlUp).Row If ws2.Cells(j, "M") = ws1.Cells(i, "D") Then ws2.Cells(j, "N") = ws1.Cells(i, "E") End If Next j Next i End Sub

専門家に質問してみよう