• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAについて)

VBAについて

このQ&Aのポイント
  • VBAで添付画像左側のデータベースから検索結果を求める方法を探しています。
  • 質問し回答を頂きましたが、パソコンの問題かコードの問題か分かりません。
  • 以下のコードは回答頂いたものです。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

どこがどう動かないか、エラーの表示はあるのか等詳しく書きましょう。 先頭の 「Sub QNo9035948_VBA関数について()」を、 「Const FirstRowD As Long = 3       ~省略~  Const DetailColumnR As String = "G"」の次に移動してください。

8312yuki
質問者

お礼

おかげさまで大変助かりましたm(_ _)m ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAコピー範囲について教えてください。

    VBAのコピーペーストの下記プログラムで、 Sub コピー() Dim rng As Range Set rng = Worksheets("2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) With Range("b2:J10") rng.Resize(.Rows.Count, .Columns.Count).Value = .Value End With End Sub コピー範囲 のJ10の部分(データ入力行)が、その都度変わるため、J10の部分を、 J列のデータが入力されている最終行としたいのですが、どのようなプログラムに すればよいのでしょうか。 どなたかよろしくお願いいたします。

  • エクセルのVBAコードにつてい

    以下のコードについて、その内容をまだ自分の知識では理解できず困っておりまして、アドバイスいただければと思いまして書き込みました。 『コード』 Sub Test() Dim Lc As Integer Dim Ct As Integer Dim MyR As Range Dim C As Range Dim D As Range Lc = Range("A1").End(xlToRight).Column - 2 For Each C In Range("B2", Range("B65536").End(xlUp)) Ct = WorksheetFunction.Count(C.Offset(, 1).Resize(, Lc)) If Ct > 0 Then Set MyR = C.Offset(, 1).Resize(, Lc).SpecialCells(2, 1) For Each D In MyR With Sheets("Sheet2").Range("A65536").End(xlUp) .Offset(1).Value = C.Value .Offset(1, 1).Value = Cells(1, D.Column).Value End With Next Set MyR = Nothing End If Next With Sheets("Sheet2") .Columns("A:B").AutoFit .Activate End With End Sub 『質問』 1.「Lc = Range("A1").End(xlToRight).Column - 2」の部分の解釈は「A1から右方向に一番最後のセルまでを範囲指定し、その一番右のセルの列番号を取得する」変数という解釈でいいのか 2.「Ct = WorksheetFunction.Count(C.Offset(, 1).Resize(, Lc))」の部分の変数はどういった値の整数を取得する変数なのか 以上2点についてアドバイスいただけると幸いです。

  • エクセルVBAとmsg関数

    こんばんは。 エクセルVAB初心者です。 現在、エクセル2003で以下の画像のような 表を作成しました。 上段が請求書データ(シート1)で、 下段が請求書の印刷フォーム(シート2)です。 VBAで実行する処理は、請求書データNOをそれぞれ 任意でクリックし、選択しているNOの行データをシート2にそれぞれ 転記していき、一括で印刷するものです。 以下のように、コードを作りました。 Sub 発行() Dim i As Range Dim m As Integer Dim W1 As String With Selection W1 = Cells(.Row, 1).Value & " ~ " & _ Cells(.Rows.Count + .Cells(1, 1).Row - 1, 1).Value & vbCrLf & _ " の請求書を発行しますか?" m = MsgBox(W1, vbYesNoCancel) If m <> vbYes Then Exit Sub For Each i In .Resize(, 1) With Sheets("Sheet2") .Range("b1").Value = Cells(i.Row, 1).Value .Range("e1").Value = Cells(i.Row, 2).Value .Range("c5").Value = Cells(i.Row, 3).Value .Range("b3").Value = Cells(i.Row, 4).Value .Range("c6").Value = Cells(i.Row, 5).Value .PrintOut End With Next End With End Sub ここで質問なのですが、"の請求書を発行しますか?" の後に、選択している行の数を(合計O枚)のように 表示したいのですが、どのようなコードを入れればいいのでしょうか。 また、メッセージボックスのウインドウの中の文字が 小さいので、もう少し大きくしたいのです。 以上の2点ですが、お願いします。

  • VBA 複数の行を挿入後、挿入以外を削除

    知恵をお借りください。 A10に5行分挿入、A13に2行分挿入、A14に1行分挿入、A16に2行分挿入 以下がコードです。 Dim n As Long n = Worksheets("Sheet1").Range("A1").Value With Worksheets("Sheet2") .Range("A10").Resize(n).EntireRow.Insert .Range("A10").Resize(n).EntireRow.Interior.Color = vbYellow .Activate End With Dim k As Long k = Worksheets("Sheet1").Range("A2").Value With Worksheets("Sheet2") .Range("A13").Resize(n).EntireRow.Insert .Range("A13").Resize(n).EntireRow.Interior.Color = vbRed .Activate End With Dim m As Long m = Worksheets("Sheet1").Range("A5").Value With Worksheets("Sheet2") .Range("A14").Resize(n).EntireRow.Insert .Range("A14").Resize(n).EntireRow.Interior.Color = vbGreen .Activate End With Dim ka As Long ka = Worksheets("Sheet1").Range("A10").Value With Worksheets("Sheet2") .Range("A16").Resize(n).EntireRow.Insert .Range("A16").Resize(n).EntireRow.Interior.Color = vbBlue .Activate End With マクロ実行後、行の並び方がバラバラになっています。 ↓イメージ図 https://mega.nz/#!yUwXHTLK!TSZvMJ1CaiTi-OoX-1j9IeNleuXesrzU5O7o2vG-svI 理想図に整えるにはどうすれば良いのでしょうか? また、マクロで行を挿入したら、不要な行を削除するコードも教えてくださればありがたいです。 ↓イメージ図 https://mega.nz/#!fMRDAKAJ!GHMpiagpn-O_0aaMhrHOozFd8WHHkSQzOS-fSCInw-g 宜しくお願いします。

  • VBA

    ~フォームの構文~の続きです。 '[確定]ボタンをクリックした時の処理 Private Sub ConfirmButton_Click() Const NumberColumn As String = "A" '転記先のシートにおいて連番を記入する列の列番号 Const DateColumn As String = "B" '転記先のシートにおいて意見が投書された日付を記入する列の列番号 Const DepartmentColumn As String = "C" '転記先のシートにおいて所属部署名を転記する列の列番号 Const TextColumn As String = "D" '転記先のシートにおいて投書内容を転記する列の列番号 Const myGroupName As String = "DepartmentSelect" '所属部署選択用のオプションボタンのGroupNameプロパティに設定した値 Dim StoragePath As String, PostFileName As String, PostSheetName As String _ , Department As String, myText As String, PostBook As Workbook _ , PostRow As Long, PostingOK As Boolean, myWindow As Window _ , buf As Variant, co As Control, myInformation As String _ Department = "": myText = "" For Each co In Opinion_Box.Controls If TypeName(co) = "OptionButton" Then If co.Value = True And co.GroupName = "DepartmentSelect" Then _ Department = co.Caption End If Next co myText = Contents_of_posting.Value myInformation = "" If Department = "" Then myInformation = "選択回答 " If myText = "" Then myInformation = myInformation & "その他" myInformation = Replace(RTrim(myInformation), " ", "と") If myInformation = "" Then Select Case MsgBox("下記の内容が入力されています。" & vbCrLf _ & "この内容でアンケートを送信してよろしいですか?" & vbCrLf _ & " [はい] : この内容でアンケートを送信します。" & vbCrLf _ & " [いいえ] : 入力フォームに戻って投書内容を修正します。" & vbCrLf _ & " [キャンセル] : 投書を中止して入力フォームを閉じます。" _ & vbCrLf & vbCrLf & "【】 " & Department _ & vbCrLf & vbCrLf & "【】 " & vbCrLf & myText _ , vbYesNoCancel + vbInformation, "アンケート内容確認") Case vbYes GoTo Label_Posting Case vbCancel Unload Me End Select Exit Sub Else If MsgBox( _ myInformation & "が入力されていません。" & vbCrLf & vbCrLf _ & "[再試行] : フォームでの入力に戻ります。" & vbCrLf _ & "[キャンセル] : 入力を中止し、フォームを閉じます。" _ , vbRetryCancel + vbExclamation, "未入力項目あり") _ = vbCancel Then Unload Me Exit Sub End If Label_Posting: myInformation = vbCrLf _ & "フォームに入力いただいた内容を投函することができません。" Call Confirm_posting_place(myInformation, PostingOK _ , StoragePath, PostFileName, PostSheetName) With Application .ScreenUpdating = False .Calculation = xlManual .DisplayAlerts = False End With buf = "" On Error Resume Next Set PostBook = Windows(PostFileName).Parent buf = PostBook.Path On Error GoTo 0 If buf = StoragePath Then Set myWindow = PostBook.Windows(1).NewWindow Else Set PostBook = Workbooks.Open(StoragePath & "\" & PostFileName) Set myWindow = PostBook.Windows(1) End If myWindow.Visible = False With PostBook .Windows(.Windows.Count).Visible = False ThisWorkbook.Activate With .Sheets(PostSheetName) PostRow = 0 PostRow = .Range(DateColumn & .Rows.Count).End(xlUp).Row + 1 .Range(NumberColumn & PostRow).Value _ = Int(WorksheetFunction.Max(.Columns(NumberColumn))) + 1 With .Range(DateColumn & PostRow) .Value = Date .NumberFormatLocal = "ggge""年""m""月""d""日""(aaa)" End With .Range(DepartmentColumn & PostRow).Value = Department .Range(TextColumn & PostRow).Value = myText End With End With With myWindow .Visible = True .Parent.Save .Close End With ThisWorkbook.Activate With Application .Calculation = xlAutomatic .ScreenUpdating = True .DisplayAlerts = True End With MsgBox "ありがとうございました!アンケート回答入力内容が送信完了しました。", vbInformation, "完了" Unload Me End Sub 以上です。宜しくお願いします。

  • VBA 重たいためコード改善お願いします

    VBA歴3か月の学習者です。 セルに入力された行数をもとに、セル範囲を決め、シートXYにコピペをするコードを作りました。 コード自体は、思い通りに動いていますが、1000回程度のループ処理を考えており、すべて終わるのに1時間程度かかってしまっています。 よろしければ、下記コード内で、時間を短縮できる編集のアドバイスをお願いいたします。 Sub test() Dim i, LastR, TopR, BottomR, myRow As Long Dim SheetD, SheetX, SheetY, SheetSu, mySheet As Worksheet Dim ColumnF, ColumnL, n As String Dim ResultRange As Range Application.ScreenUpdating = False Set SheetD = Sheets("D") Set SheetX = Sheets("X") Set SheetY = Sheets("Y") Set SheetSu = Sheets("Sum") Set ResultRange = SheetSu.Range("Z6:BT6") ColumnF = "A" ColumnL = "M" LastR = SheetD.Range(ColumnF & Rows.Count).End(xlUp).Row TopR = 2 i = 2 Do Until SheetD.Cells(i, "X") = "" And SheetD.Cells(i, "Y") = "" If SheetD.Cells(i, "X") = "" Or SheetD.Cells(i, "Y") = "" Then i = i + 1 Else With SheetD TopR = .Cells(i, "X").Value BottomR = .Range("B" & TopR).End(xlDown).Row .Range(ColumnF & TopR & ":" & ColumnL & BottomR).Copy End With With SheetX .Columns(ColumnF & ":" & ColumnL).ClearContents .Range("B1").PasteSpecial Paste:=xlPasteValues End With With SheetD TopR = .Cells(i, "Y").Value BottomR = .Range("B" & TopR).End(xlDown).Row .Range(ColumnF & TopR & ":" & ColumnL & BottomR).Copy End With With SheetY .Columns(ColumnF & ":" & ColumnL).ClearContents .Range("B1").PasteSpecial Paste:=xlPasteValues End With ResultRange.Offset(Cells(Rows.Count, "Z").End(xlUp).Row - 5).Value = ResultRange.Value i = i + 1 End If Loop Application.CutCopyMode = False SheetX.Columns(ColumnF & ":" & ColumnL).ClearContents SheetY.Columns(ColumnF & ":" & ColumnL).ClearContents Application.ScreenUpdating = True MsgBox "Finish" End Sub

  • VBAデータ元から新規ブックに出力

    現在のブック内に出力されるとメモリの都合上時間がかかりすぎますそこで新規ブック1個に出力する構文を教えていただきたいのですが、宜しくお願いします。 Sub 1111() Dim c As Range Dim i As Integer, LastRow As Long Dim NewSheetName As String, MatchFlag As Boolean Application.ScreenUpdating = False NewSheetName = "" With Sheets("データ元") For Each c In .Range(.Cells(3, "B"), .Cells(Rows.Count, "B").End(xlUp)) MatchFlag = False If NewSheetName <> Year(c.Value2) & "年" & Month(c.Value2) & "月" Then NewSheetName = Year(c.Value2) & "年" & Month(c.Value2) & "月" For i = 1 To Worksheets.Count If Sheets(i).Name = NewSheetName Then Sheets(i).Cells.ClearContents MatchFlag = True Exit For End If Next i If MatchFlag = False Then Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = NewSheetName End If End If LastRow = Sheets(NewSheetName).Cells(Rows.Count, "A").End(xlUp).Row Sheets(NewSheetName).Cells(LastRow + 1, "A").Resize(1, 6).Value = .Cells(c.Row, "A").Resize(1, 6).Value Sheets(NewSheetName).Columns("A:F").EntireColumn.AutoFit '↑A列からF列まで自動幅調整してます Next .Activate End With Application.ScreenUpdating = True MsgBox "終了しました", vbInformation End Sub

  • エクセルVBAでTransposeの不思議

    MS Officeのエクセル2000です。 下記Sub test01はRange("A1:I1")に文字列を入力し、一旦配列に取り込んでからワークシートに貼り付けるものです。 試験用のコードですので意味はありません。 このコードで255文字まではまったく問題はありません。 ところが、256文字以上の場合、横に貼り付けは問題ないのですが、 Transposeで縦に変換すると型が一致しません。(Error 13)となります。 どうしてでしょうか? 試行錯誤の結果、Sub test02のように一旦横に貼ったデータをコピーしてTransposeして貼り付けるのは大丈夫のようですので不思議でしょがありません。 またこの方法は列数256より要素が多い配列には使えないので解決策にはなりません。 ご教示くださいませ。 Sub test01() Dim myAr As Variant Dim i As Integer, n As Integer n = 256 '文字数 With ActiveSheet .UsedRange.ClearContents For i = 1 To 9 .Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n) Next myAr = .Range("A1:I1").Value .Range("A3").Resize(, UBound(myAr, 2)).Value = myAr .Range("A5").Resize(UBound(myAr, 2)).Value = Application.Transpose(myAr) '256文字の場合エラー End With End Sub Sub test02() Dim myAr As Variant Dim i As Integer, n As Integer n = 256 '文字数 With ActiveSheet .UsedRange.ClearContents For i = 1 To 9 .Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n) Next myAr = .Range("A1:I1").Value .Range("A3").Resize(, UBound(myAr, 2)).Value = myAr .Range("A3").Resize(, UBound(myAr, 2)).Copy .Range("A5").PasteSpecial Paste:=xlValues, Transpose:=True '256文字の場合もOK Application.CutCopyMode = False End With End Sub

  • エクセルの連続印刷マクロについて

    VBAの知識がなく困っています。 エクセルのC1を+1、B5を+10連番で増やして印刷したいのですが、Webで調べた下記の記述に、色々プラスしてみましたが、片方の数しか増えません。 ご教示お願いいたします。 Const conStart As Long = 51 '開始番号 Const conEnd As Long = 60 '終了番号 Const conStep As Long = 1 '間隔 Const conCell As String = "C1" 'セル番地 '変数 Dim i As Long With Application .ScreenUpdating = False With .ActiveSheet.Range(conCell) For i = conStart To conEnd Step conStep .Value = i ActiveSheet.PrintOut Next End With .ScreenUpdating = True End With End Sub

  • A B C

    A B C コード 商品 単価 1 チョコレート 100 2 キャンディー 50 3 ガム 80 4 スナック菓子 150 5 乳製品 170 上記表の下にデータを追加していきたいのですが、その際重複データの入力及びコピーもできないようにしたいと思います。 Private Sub CommandButton1_Click() Dim endrow As Long Dim i As Integer endrow = Range("商品").Columns(1).CurrentRegion.Rows.Count Range("商品").Rows(endrow + 1).Columns(1).Value = TextBox1.Value Range("商品").Rows(endrow + 1).Columns(2).Value = TextBox2.Value Range("商品").Rows(endrow + 1).Columns(3).Value = TextBox3.Value TextBox1.Value = Clear TextBox2.Value = Clear TextBox3.Value = Clear With Range("A2") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i, 0) = .Offset(i - 1, 0) Then .Offset(i, 0).EntireRow.Delete Next i End With End Sub すぐ上の行と同じ場合には入力ができませんが、それ以外での重複している場合の入力を回避する為の改善箇所をご教示の程お願い致します。(コードが同じで入力不可)

専門家に質問してみよう