VBAで本のリストをグループ化する方法

このQ&Aのポイント
  • VBAを使用して、取り込んだ本のリストをグループ化して見やすくする方法について教えてください。
  • エラーが発生し、実行時エラー 1004が表示されます。アプリケーション定義またはオブジェクト定義のエラーです。
  • 質問文章のVBAコードを解説してください。
回答を見る
  • ベストアンサー

VBA グループ化について

VBAで、取り込んだ本のリストをグループ化して見やすくしようと思ったのですが、@のついているところでエラーが出ます。 (あるところからとってきたVBAを自分で付け加えたものです。) A列に著者、B列に本のタイトルが書かれているリストで、完成図としては著者の毎にグループがされ、著者のグループを開くと、本のタイトルのグループが出てくるかたちを目指しています。 エラー内容は以下の通りです。 実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。 どなたか教えて下さい。 Sub TEST() Dim wri1 As Long Dim wri2 As Long Dim wri As Long Dim com1 As Long Dim com2 As Long Dim com As Long Dim strFORMULA As String ActiveCell.Activate com = 1 Do While Cells(com, 2).Value <> "END" com1 = com com = com + 1 Do While Cells(com, 2).Value = Cells(com1, 2).Value com = com + 1 Loop com2 = com - 1 Rows(com).Insert Cells(com, 2).Value = Cells(com1, 2).Value Cells(com, 1).Value = Cells(com1, 1).Value Rows(com1 & ":" & com2).Group com = com + 1 Loop wri = 1 Do While Cells(wri, 1).Value <> "END" wri = wri wri = wri + 1 @@@ Do While Cells(wri, 1).Value = Cells(wri1, 1).Value wri = wri + 1 Loop wri2 = wri - 1 Rows(wri).Insert Cells(wri, 1).Value = Cells(wri1, 1).Value Rows(wri1 & ":" & wri2).Group wri = wri + 1 Loop End Sub 

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

  • ベストアンサー
  • ambriel
  • ベストアンサー率51% (65/127)
回答No.1

問題の箇所まで、変数「wri1」には何も入れられていません。 手前の「wri = wri」「wri = wri + 1」あたりで何かをしたかったのでしょうか? 余談ですが、著者ごとに整理するのであれば、「sortメソッド (並び替え機能) でソート後にグループ化設定を行うのが手っ取り早いような気がします。

関連するQ&A

  • VBA 合計金額の計算

    OSは、XPpro Excelは2003を使用しています。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1444918209 を参考にさせて頂いて、 Dim gk As Variant Dim i As Long i = 2 Do While Cells(i, 1).Value <> "" gk = gk + Cells(i, 2).Value If Cells(i, 2).Value = "" Then Cells(i, 2).Value = gk gk = 0 End If i = i + 1 Loop i = 2 Do While Cells(i, 1).Value <> "" gk = gk + Cells(i, 3).Value If Cells(i, 3).Value = "" Then Cells(i, 3).Value = gk gk = 0 End If i = i + 1 Loop として、図の水色のセルの合計までは出来たのですが、 合計行だけDセルにBセルとCセルの合計を入たいのですが、 どの様にすれば良いか どなたか教えて頂けないでしょうか? 説明不足なところがありましたら、追記致します。 どうかよろしくお願い致します。

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

  • エクセルVBAの二重ループについて

    今月VBAを勉強し始めた初心者です。 Webにて入力されたcsvファイルを編集する際に 最新投稿を残して表に出力する目的で 下記のマクロを作成して実行してみたところ 変数i、jが0になるまでループが繰り返されてエラーになってしまいます。 ループ範囲指定のどこに問題があるのでしょうか? こちら側の環境が OS:Windows7 64bit Ultimate Office2007 です。 ご教授宜しくお願い致します。 Sub namaesakujo() Dim i As Integer Dim j As Integer Dim mct As Integer Dim Name1 As String Dim Name2 As String Dim Time1 As Long Dim Time2 As Long Worksheets("result").Activate mct = Worksheets("result").UsedRange.Rows.Count '最大行数を指定 Name1 = Cells(i, 2).Value '名前1 Name2 = Cells(j, 2).Value '名前2 Time1 = Cells(i, 1).Value '時間1 Time2 = Cells(j, 1).Value '時間2 '変数iを最終行数~2行目まで指定 i = mct Do While i > 2 '変数jを最終行数~2行目まで指定 j = mct Do While j > 2 '2列目iと2列目jが等しい(名前が同じ)場合、日時が小さい方を削除する If Name1 = Name2 And Time1 > Time2 Then Cells(j, 1).EntireRow.Delete End If j = j - 1 Loop i = i - 1 Loop MsgBox "更新完了" End Sub

  • VBA Do~Loopについて

    VBA勉強中です。 マクロの作成は完了しているのですが、処理効率について指摘を受け、 その際に助言もいただいたのですが、自身の勉強不足、理解不足で どのように変更すれば良いのか分からず、教えていただきたいです。 Do While Ax2 <= 30 で30回繰り返すのではなく (Cells(Ax2,"B").Value <> "" ) の間繰り返すように変更したいです。 ---------------- Sub test()  Dim File1(30) As string  Dim Sheet1(30) As string  Dim Sheet2(30) As string  Dim Cnt As Integer  Ax1=1  Ax2=7  Do While Ax2 <= 30    If Cells(Ax2, "B").Value <> "" Then     File1(Ax1) = Cells(Ax2, "B").Value     Sheet1(Ax1) = Cells(Ax2, "C").Value     Sheet2(Ax1) = Cells(Ax2, "D").Value     Cnt =Ax1    End If    Ax1 = Ax1 + 1    Ax2 = Ax2 + 1  Loop End Sub ---------------- お手数ですが、よろしくお願いいたします。

  • エクセルVBAで

    登録ボタンを作りたいのですが うまくいきません。 応答無しになってしまいます。 仕事でコードを入力して、住所やその他の関連事項を 登録して、検索し、封筒に宛名印刷し、登録内容の修正をしたいと思っています。 登録ボタンは下記のようなものを作りました。 Private Sub CommandButton1_Click() Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 Do While sh2.Cells(cnt1, 2).Value <> "" cnt = cnt1 + 1 Loop '得意先CD sh2.Cells(cnt1, 2).Value = sh1.Cells(2, 3).Value '現場CD sh2.Cells(cnt1, 3).Value = sh1.Cells(3, 3).Value '送り方 sh2.Cells(cnt1, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(cnt1, 23).Value = sh1.Cells(5, 3).Value MsgBox "登録できました。" End Sub 何が悪いのでしょうか? よろしくお願い致します。

  • vba ファイルの移動について

    フォルダAの中にあるたくさんのpdfファイルの中から、 ファイル名の頭文字3つがE列に記載した「aaa」だったら フォルダBに移動させるという内容にしたいです。 ネット検索などで、近いものを作成しましたが(下に貼り付け)、 下から4行目、「fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName」で 「実行時エラー'53'  ファイルが見つかりません。」 とエラーが出てしまいます。 どの様に書き直せばよいのでしょうか? どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。 エクセル2010を使用しています。 Sub CheckAndMoveFiles() Dim FolderA As String Dim FolderB As String FolderA = Range("D1").Value FolderB = Range("B2").Value Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ws As Worksheet Set ws = ActiveSheet Dim lastRow As Long lastRow = ws.Range("E" & Rows.Count).End(xlUp).Row Dim r As Long Dim fileName As String For r = 1 To lastRow If ws.Cells(r, "E").Value <> "" Then fileName = ws.Cells(r, "E").Value dFileName = Dir(FolderA & "\" & Left(fileName, 3) & "*.pdf") Do While dFileName <> "" dFileName = Dir() Loop fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName 'ここでストップ End If Next End Sub

  • ExcelのVBAについて

    こんにちは、VBA初心者です。 C:\pictureの中に以下のファイルがあります。 DSC_0134.JPG~DSC_0154.JPG これらのファイルをExcelのA列1~20行に書かれた文字△○%&◎~▲▽%%★に.JPGをつけて保存したくて以下のコードを書きました。 Dim buf As String Dim msg As String Dim i As Integer Dim A As Variant i = 1 buf = Dir("dsc*.jpg", vbNormal) Do While buf <> "" Do While i < 21 buf = Dir() msg = buf 'msg=元の名前 A = Worksheets("sheet1").Cells(i, 1).Value     Worksheets("sheet1").Cells(i, 2).Value = msg          Name "C:\picture\msg" As "C:\picture\A.jpg"     i = i + 1 Loop Loop Name "C:\picture\msg" As "C:\picture\A.jpg"のところで、「ファイルがありません。」となってしまいます。 あと、Worksheets("sheet1").Cells(i, 2).Value = msgのところで、\pictureの中の最初のファイル(DSC_0134.JPG)を表示しません。 どこを直せばよいのでしょうか?

  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • VBAでオブジェクトがありません、となってしまう

    VBAを実行すると、 実行エラー424 オブジェクトが必要です。 となってしまいます。 エラーとなっている行は、 .Document.getElementById("q_d").Value = ActiveSheet.Cells(rowno, 1).Value です。 作成したリストは、以下のようになっています。 Sub MAP住所() Dim objIE As Object, rowno As Integer rowno = 1 Set objIE = CreateObject("InternetExplorer.Application") With objIE 'Google Map起動 .Navigate "http://maps.google.co.jp/" .Visible = True Do While (ActiveSheet.Cells(rowno, 1).Value <> "") 'IE待機 Do While .Busy = True DoEvents Loop '住所をテストボックスへ入力 .Document.getElementById("q_d").Value = ActiveSheet.Cells(rowno, 1).Value '送信ボタンクリック .Document.forms(0).submit '次の行 rowno = rowno + 1 Loop End With Set objIE = Nothing End Sub A列にある住所を読み込んで、グーグルマップに表示するスクリプトになります。 どう直して良いのか、皆目わかりません 御指南願います

  • VBA DO~While LOOPを解除したい

    いつもお世話になります。 すみません、下記のコードで 、DO~While LOOP ステートメントを解除して、一回だけ 実施するようなコードに修正したいのですが、自分ではうまく修正できません。 どうか修正したコードを教えていただけないでしょうか。 Sub ShowBarCode() Dim xlAPP As Application Dim GYO As Long Dim objOLEObject As OLEObject Dim objBarCode As BARCODELib.BarCodeCtrl Dim lngLeft As Long Dim lngTop As Long Dim intHeight As Integer Dim intWidth As Integer Dim sh As Worksheet Set xlAPP = Application xlAPP.ScreenUpdating = False xlAPP.Calculation = xlCalculationManual xlAPP.Interactive = False On Error GoTo ERROR_EXIT GYO = 66 Do While Cells(GYO, 99).Value <> "" Cells(GYO, 100).Select ' 現在セルの位置を取得 With ActiveCell lngLeft = .Left + .Width * 0.05 lngTop = .Top + 1 intHeight = .height * 0.7 intWidth = .Width * 6.9 End With ' 現在セルにバーコードを貼付ける ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _ Link:=False, DisplayAsIcon:=False, _ Left:=lngLeft, Top:=lngTop, Width:=intWidth, _ height:=intHeight).Select Set objOLEObject = Selection Set objBarCode = objOLEObject.Object With objOLEObject .Visible = False ' 一旦消去 .Placement = 2 .Visible = True ' 表示 End With With objBarCode .Style = 2 ' JAN-13 .SubStyle = 0 .Validation = 1 ' C/D修正有り .ShowData = 0 ' 数値表示なし .Value = Cells(GYO, 100).Value .Refresh End With Cells(GYO, 100).FormulaR1C1 = "=LEFT(RC1,7)&"" ""&RIGHT(RC1,6)" GYO = GYO + 1 Loop Cells(1, 1).Select xlAPP.Interactive = True xlAPP.Calculation = xlCalculationAutomatic xlAPP.ScreenUpdating = True Exit Sub ERROR_EXIT: xlAPP.Interactive = True xlAPP.Calculation = xlCalculationAutomatic xlAPP.ScreenUpdating = True MsgBox Err.Description End Sub

専門家に質問してみよう