• ベストアンサー

VBAの構文を作りましたが、うまくいきません。困った・・

n-junの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

ANo.4です。 zap35さん >VBE画面からコピーしても半角空白やタブが入りますから、私の場合は手間ですが一旦エディタに貼り付けて、 >文字置換してから回答欄に貼り付け直しています。ご参考まで。 大変参考になりました。ありがとうございます。 質問者様、横入り失礼致しました。

関連するQ&A

  • 印刷後のVBAの実行(4)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "顧客データー1" Then If Range("D1").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D1").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("顧客データー1").Range("D6") = "不可" Or _ Worksheets("顧客データー2").Range("D6") = "不可" Then GoTo P1 ActiveSheet.Range("F650:O650").Copy If Worksheets("日報").Range("F5").Value = "" Then Worksheets("日報").Range("F5").PasteSpecial Paste:=xlPasteValues Else Worksheets("日報").Range("F65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub 現在上記コードを使っていますが、ワークシート日報への値のみ貼り付けの部分で少し変更したいのですが、印刷するシートのセルM1の値が1ならそのシートのRangeF650:O650をコピーしてワークシート日報のF5に値のみで貼り付け、M1の値が2ならF6に、M1の値が3ならF7に・・・という感じでM1の数字の値によってワークシート日報へ貼り付け先を変えていくようしたいのですが、どのようにコードを変更したらいいでしょうか?

  • 印刷後のVBAの実行 (3)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

  • VBAエクセル2003での下記の命令文の作成2

    命令文: シート名:商品売上げのセルB16に入っている数字と シート名:売り上げのセルC16に入っている数字が同じなら メッセージBOXに○を表示させる そうでなければ メッセージBOXに×を表示させる ↓ Sub 売り上げ() Set WS1 = Worksheets("売上") Set WS2 = Worksheets("商品売上") If WS1.Range("C16") = WS2.Range("B16") Then MsgBox "○" Else MsgBox "×" End If End Sub この作業をマクロの実行を押さずにショートカットキーで 作業を可能にするには どういった命令文または操作でショートカットキーでの表示がかのでしょうか。 (ショートカットキーを押すことで○×の表示を出すにはどうしたらいいでしょうか?) また、同じシート内でB16のセルとC16のセル、D15が同じ場合は メッセージボックスに○そうでない場合は×の場合は Sub 売り上げ2() Worksheets("商品売上") If Range("B16") = Range("C16") =Range("D15") Then MsgBox "○" Else MsgBox "×" End If End Sub だけでいいんでしょうか? 詳しい方教えてください。 今、仕事でミスが多くプログラミングでどうにか ミスを防げないか工夫したいのですが まだ、習いたてでよくわかりません。 お手数が教えていただけませんでしょうか。 よろしくお願いいたします。

  • EXEL VBAで印刷の指定をしたいのですが

    VBA初心者、勉強中です。 sheet1に2つの表がありまして下記のとおりボタンをクリックしたらインプットボックスが立ち上がって2つの表の1か2を指定したら範囲がぷれびゅーするということなんですが、1を入れても、2を入れてもMsgBox "1か2を入力して!しか表示しません。 さんざん調べまくりましたが、どなたかご教授お願いします。 Sub 印刷() Dim SentP As Integer On Error Resume Next SentS = InputBox("どちらを印刷?1売上 2材料") If SentP = 1 Then Range("a1:g32").Select Selection.printpreiew ElseIf SentP = 2 Then Range("j1:n41").Select Selection.PrintPreview Else MsgBox "1か2を入力して!" End If End Sub

  • Excel VBA「If else」の使い方

    Excelで管理台帳を作っています コマンドボタンをクリックすると、元データ「受給者情報」シートから今月利用終了となる人のリストを「利用終了者」シートに抽出できるようにしています 正しい作り方ではないのかもしれませんが、これでちゃんと抽出できているから抽出自体はこれでも問題ないと思います(^_^;) それはいいのですが、対象となる人がいない場合、抽出先の「利用終了者」シートにはタイトル行しか出ません。 それでも構わないのですが、できたら抽出データがない場合(A2セルより下のデータがない場合)は、「今月で終了の利用者はいません」とメッセージを出し、「top_page」シートに移動させたいのです そのやり方がうまくいきません 現時点はこのように入れています Private Sub CommandButton2_Click() Worksheets("利用終了者").Select Worksheets("利用終了者").Range("A:M").Clear With Worksheets("受給者情報") .Range("A:M").Copy Worksheets("利用終了者").Range("A1") .Range("A:Q").AdvancedFilter _ Action:=xlFilterCopy, _ criteriarange:=.Range("U1:V3"), _  CopyToRange:=Worksheets("利用終了者").Range("A:M"), _ unique:=False End With MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then Exit Sub End If Worksheets("利用終了者").PrintOut Sheets("top_page").Select Range("a1").Select End Sub If elseを使うんだろうな、というのは何となくわかるのですが、どこにどう入れたらちゃんと反応するのかわかりません。 一度、  (前略) If Application.CountA(Range("A2")) = 0 Then MsgBox "今月末で終了の利用者はいません", vbOKOnly + vbInformation, "確認" Else MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then Exit Sub End If Worksheets("利用終了者").PrintOut End If Sheets("top_page").Select Range("a1").Select End Sub と入れてみたのですが、これだと2行目以降もデータがあっても、「今月末で終了の利用者はいません」となってしまいます 2行目以降にデータがある場合は「今月末で終了の利用者です!」とメッセージボックスを出し、2行目以降にデータがない場合は「今月末で利用終了の利用者はいません」とメッセージボックスを出したいです そのやり方を教えてください。お願いします ちなみにバージョンはExcel2010です

  • VBAの書き方を教えてください 3

    何度も申し訳ございません。 以前にもこちらで質問させて頂いている者です。 Sheet1のrange("A1")をVLOOKUPで検索後の文字を取得し、同じ名前のシートを検索し、さらにrange("A1000")をアクティブにしてここからコードをつなげて処理しています。 range("A1")の処理が終わったら、range("A2")の処理に入り、range("A3") range("A4")を続けて処理を行っているのですが、range("A4")でVLOOKUPの検索が空白の場合、On Error GoTo myErrorで次のrange("A5")の処理に入りますが、On Error Gotoは1回のみの処理しかできないみたいで、range("A5")が空白の場合、実行時エラー9が発生してしまいます。 教えて頂いたコードを解読し、On Error Resume Nextなどを使おうとしているのですが、上手くできません。 1から10まで質問しっぱなしなのですが、どなたかご協力を頂けないでしょうか。 とりあえず自分の必要なコードはある程度省いて、2つ分のみ記載します。 本来この後、10回同じ処理を行います。 よろしくお願い致します。 Private Sub 記帳_Click()  On Error GoTo myError1  Dim i As Long  Dim myFlg As Boolean    For i = 1 To worksheets.Count If worksheets(i).Name = Range("A1").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select    ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If myError1: On Error GoTo myError2 For i = 1 To worksheets.Count If worksheets(i).Name = Range("A2").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If End sub

  • VBA beforeprintについて

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "sheet1" Then If Range("M1").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("M1").Select Exit Sub End If ElseIf ActiveSheet.Name = "sheet2" Then If Range("A47").Value = 文字 Then Cancel = True    MsgBox ("日付を入力してください") Range("A47").Select Exit Sub End If Exit Sub End If End Sub 上記は印刷をする前に実行されるコードですが、上記を実行して印刷をした後に自動で下記のVBAを実行したいのですが Sub データー取り込み() ActiveSheet.Range("B2000:Z2000").Copy ChDir "\\データーA\データーB\データーC\データーD" Workbooks.Open Filename:="\\データーA\データーB\データーC\データーD\データーシート1.xls" Sheets("顧客データー").Select If Worksheets("顧客データー").Range("B18").Value = "" Then Worksheets("顧客データー").Range("B18").PasteSpecial Paste:=xlPasteValues Else Worksheets("顧客データー").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If ActiveWorkbook.Save ActiveWindow.Close End Sub 上記のコードと下記のコードをどのように絡めたらいいのかわかりません。アドバイスお願いします。

  • ExcelVBAで、必要な列を抽出する方法

    いつもお世話になっております Excelシートで、次のような表を作っています [Sheet1] A/B/C/D/E センター/氏名/生年月日/契約開始日/契約終了日 ※契約終了日のセルには計算式が入っていて、契約開始から18か月後の日付が出るようにしています。 また、G1セルに「契約終了月」、G2に「18」と入っています そこで、[Sheet2]に必要な行のみを抽出し、印刷するまでをしたいのですが、どのようにしたら良いのかわかりません 今できているのは、こんな感じです Private Sub CommandButton1_Click() Worksheets("Sheet2").Select Worksheets("Sheet2").Range("A:E").Clear With Worksheets("Sheet1") .Range("A:E").Copy Worksheets("Sheet2").Range("A1") .Range("A:E").AdvancedFilter _ Action:=xlFilterCopy, _ criteriarange:=.Range("G1:G2"), _ CopyToRange:=Worksheets("Sheet2").Range("A:F"), _ unique:=False End With If Application.CountA(Worksheets("Sheet2").Range("A:A")) > 1 Then MsgBox "今月末で契約終了です", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbYes Then Worksheets("Sheet2").PrintOut End If Else MsgBox "今月で契約終了となる方はいません", vbOKOnly + vbInformation, "確認" End If Sheets("top_page").Select Range("A1").Select End Sub ※top_pageシートでコマンドボタンをクリックするとマクロ実行できるようにしています 連続する列の抽出の仕方はわかるのですが、例えば A列、B列、E列のみ を抽出させる場合どのようにしたらよいのか、アドバイスをお願いします できたら、抽出後、印刷までできるようなやり方がもっと簡単なのがあれば、教えていただけると助かります 色々勉強してはいるのですが、今一つわからないので、よろしくお願いします

  • vba if構文 すべて答えが同じになってしまう

    現在vbaの勉強中です。 問題集通りに下記コードを設定しました。 a1に20以下の数値、例えば「5」を入力するも、 「成人です」の結果になってしまいます。 20より小さい場合は未成年ですの表記になるはずですが・・・。 Sub mondai() Sheets("Sheet3").Select Dim nenrei As Long nenrei = Range("a1").Value If nenrei > 20 Then  MsgBox "成人です" Else  MsgBox "未成年です" End If End Sub

    • ベストアンサー
    • XML