• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで2つのBOOKのセル範囲を比較)

VBAで2つのBOOKのセル範囲を比較

Thiotimolineの回答

  • ベストアンサー
回答No.5

マクロなら Windows(2).Activate とか ActiveWindow.ActivateNext でも良いです。 Window は二つ限定のコードですが

emaxemax
質問者

お礼

ActiveWindow.ActivateNext は CreateObject("WScript.Shell").SendKeys "^{F6}" と同じことなんですね。ありがとうございます。

関連するQ&A

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If End Sub

  • VBA inputbox関数について

    質問をさせてください。 VBA inputbox関数にて 数字を入力をし、その数字を元に挿入を行うというものを施しています。 そして下記の内容で実際は動くのですがどうしても疑問点が浮かんできます。 それはinputbox関数には宣言をしないと文字列として処理されますよね? なので、宣言をlongにして整数化をしています。 しかし、If "1" <= buf1 <= "65536" Thenの部分で 数字に""(ダブルコーテーション)を入れないとうまく作動しません。 例えば「0」を入力しても正の処理へ行います。 ダブルコーテーションで囲んでいる数値は文字列として認識されるはず・・ 入力は数値として宣言をしているのだからダブルコーテーションはいらないのではないんでしょうか? また、もし数字ではなく、記号などを入力をしてしまった場合の偽の処理へいくにはどうすれば いいでしょうか? 恐れ入りますがよろしくお願いいたします。 Sub test() Dim buf1 As Long buf1 = InputBox("コピー先の列番号を入力してください") If "1" <= buf1 <= "65536" Then Cells(buf1, 1).EntireRow.Insert Else MsgBox "正しい列番号を入力してください" Exit Sub End If End Sub

  • エクセルVBA Inputboxについて教えてください。

    InputBoxの使い方について教えてください。 テストで下記のように書いてみました。 Sub input_test2() ans = InputBox("質問!適当に数字を入れてね") MsgBox Application.WorksheetFunction.IsNumber(ans), vbInformation, "入力判定" If Application.WorksheetFunction.IsNumber(ans) Then If ans = 0 Then MsgBox "入力されたのは、 0", vbInformation, "回答" If ans = 1 Then MsgBox "入力されたのは、 1", vbInformation, "回答" If ans = 2 Then MsgBox "入力されたのは、 2", vbInformation, "回答" If ans = 3 Then MsgBox "入力されたのは、 3", vbInformation, "回答" If ans >= 4 Then MsgBox "入力されたのは、 4以上", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub 1.入力が数値ならTRUEがかえると思ったのですが、何を入れてもFALSEしかかえりません。どこがまずいのでしょうか? 2.表示されるInputBoxのサイズが随分横に長いのですが、サイズを変える方法はあるのでしょうか? 3.MsgBoxの"入力判定"や”回答”ようにInputBoxにも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

  • VBAでセル範囲条件の指定

    下記のようなことを行いたいのですが、VBAの記述でうまくいかなくて困っています。 ----------------------- もし、現在選択中のセルがA1からA5の範囲にあるならば→「実行1」を行う もし、A1からA5の範囲内にないなら「実行2」を行う ------------------------ たったのこれだけのことなのですが、「A1からA5の範囲」を指定する方法がよくわかりません。 ------------------------ Sub セル範囲判定() If ActiveCell = Range("A1:A5") Then MsgBox "A1:A5がアクティブです" Else MsgBox "A1:A5がアクティブではありません" End If End Sub ------------------------- などとしてもうまくいきません。 構文が良くわかっていないので困っています。 「アクティブセルが○○なら」という部分を教えていただけると助かります。

  • 選択範囲の空白セルに0を入れるマクロ

    Private Sub CommandButton1_Click() If Cells("選択範囲").SpecialCells(xlcellTypeblank).Select Then Range("選択範囲").Value = 0 End If End Sub このマクロを作成したのですが、動きません。 どこが、おかしいのでしょうか?

  • EXCEL VBAで空白削除のマクロを作りましたが

    削除されません。 下記のとおりですが、どう考えても動きません、どなたか修正をお願いします。 初心者です。宜しくお願いします。 Sub Ksakujyo() Dim ObjRange As Range On Error Resume Next Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8) On Error GoTo 0 If ObjRange Is Nothing Then MsgBox "キャンセルされました。" End If If Selection.Count = 1 Then Exit Sub On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Exit Sub End Sub

  • InputBoxで代入した変数を比較演算子で処理

    InputBoxに入力し その値を判定後次処理に進むよう作成中で つまづいてます。 InputBoxにtype1を記述すると 空白で「OK」を選択時に 「入力した数式は正しくありません」 というヘルプ付のエクセル標準の警告 が表示される為、type1をやめ、  IsNumericが数値ではないのにTrueを返す文字の対策、 正の整数半角以外の時は再入力させるように (0、負、数字以外、大文字、キャンセル、キャンセルのキャンセル、  空白でOKを押すなど) してみましたが肝心の ElseIf 開始行2 > 最終行 Then と ElseIf 終了行2 <= 開始行2 Then が思ったように処理されません。 ウォッチ式でも ElseIf 開始行2 > 最終行 Then ↓ 3 > 25  12 > 25 →双方Falseのはず→True→【NG】 ElseIf 終了行2 <= 開始行2 Then ↓ 3 <= 4 →Trueのはず→True→【OK】 7 <= 4 →Falseのはず→False→【OK】 12 <= 4 →Falseのはず→True→【NG】 4 <= 11 →Trueのはず→False→【NG】 という具合です。 変数の型の未定義が原因かと 数値系で定義すると"False" Thenの所で「型が一致しません」で ERRです。 変数の開始行、終了行の型をAs Longにして ElseIf 開始行 = "False" Then ElseIf 終了行 = "False" Then ↓ ElseIf 開始行 = False Then ElseIf 終了行 = False Then にすればERRは出ませんが本題は改善されません。 片方の変数を数値で固定すれば思ったように動きました。 例:ElseIf 終了行2 <= 4 Then 変数同士を比較演算子で判定はできないのでしょうか? 正しく判定できない原因を教えていただきたくお願いします。 Dim 最終行 Dim 開始行 Dim 開始行2 Dim 終了行 Dim 終了行2 Dim 質問 最終行 = Cells(Rows.Count, 3).End(xlUp).Row Do 開始行 = Application.InputBox("開始行を" & vbCrLf & _ "数字で入力してください") If 開始行 = "" Then '(分岐1-1)空白でOKを押時 MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 開始行 = "False" Then '(分岐1-2)キャンセル選択時 '(分岐1-2-1) If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub 'OK押下時→終了 End If '1-2-1終了 ElseIf IsNumeric(開始行) Then '(分岐1-3-1)数値か確認 開始行2 = StrConv(開始行, vbNarrow) '数値なら全角→半角 'IsNumericがTrueを返した時の確認 If InStr(開始行2, ".") Then '(1-3-2)小数指定時と123.56対応 MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 <= 0 Then '(1-3-3)負の数字と-123対応 MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" 'IsNumericが数値ではないのにTrueを返してしまう文字の対策 ElseIf InStr(開始行2, "+") Then '(1-3-4)+123と123+対応 MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "-") Then '(1-3-5)123-対応 MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, ",") Then '(1-3-6)1,,,,,,6対応 MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "E") Then '(1-3-7)3E2対応 MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "D") Then '(1-3-8)3D2対応 MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" '判定開始 ElseIf 開始行2 = 1 Then '(1-3-9)1は駄目 MsgBox "【1】は指定できません。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 > 最終行 Then '(1-3-10)●入力値が最終行を超える MsgBox "【" & 開始行2 & "】" & "行以降はデータがありません。(>_<)" _ & vbCr & "再入力してください", vbCritical, "エラー!!" Else '(1-3-11)1~10以外の場合 Exit Do 'Doを抜ける End If '1-3 11項目終了 Else '(分岐1-4)数値以外の場合 MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If '1~4終了 Loop 質問 = MsgBox("最終行まで処理しますか?", vbYesNo + vbQuestion) Select Case 質問 Case vbNo Do 終了行 = Application.InputBox("終了行を" & vbCrLf & _ "数字で入力してください") If 終了行 = "" Then MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 終了行 = "False" Then If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub End If ElseIf IsNumeric(終了行) Then 終了行2 = StrConv(終了行, vbNarrow) If InStr(終了行2, ".") Then MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 0 Then MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "+") Then MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "-") Then MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, ",") Then MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "E") Then MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "D") Then MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 開始行2 Then'●判定 MsgBox "入力した値は" & vbCr & "開始行以前です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" Else Exit Do End If Else MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If Loop 最終行 = 終了行2 '最終行の値を終了行2に変更 Case vbYes 'Yesの場合 End Select '最終行の値は変更せず次の処理へ

  • ExcelVBAの知恵をお貸しください。

    一つのシートで、複数のセル範囲を選択している場合に、セル範囲を選択しているのか?列、行を選択しているのかを判別する方法として次のようなのを考えました。 それとなく動いているのですが、なんとなくスマートでなく、場当たり的な感じがしますが、どのようにすればいいのか判りません!! どなたか、アドバイス頂けないでしょうか?宜しくお願いいたします。 Sub test()  Dim myRang As Range  Dim myArry As Variant  For Each myRang In Selection.Areas myArry = Split(Replace(myRang.Address, ":", ""), "$") If UBound(myArry) <> 2 Then   MsgBox "セル範囲を選択しています。" & myRang.Address Else If IsNumeric(myArry(1)) Then MsgBox "行を選択しています。" & myRang.Address Else MsgBox "列を選択しています。" & myRang.Address End If End If  Next End Sub

  • エクセルVBAでスピンボタン

    ワークシート上にスピンボタンを配置しました。 Valueは、Max100、Min0 で設定しました。 やりたいのは、スピンボタンでValueを減らしていって、0になるまでは何も言わず、Valueが0の状態でさらに減らそうとした場合、メッセージを出したいのです。 Private Sub SpinButton1_Change() If SpinButton1 <= 0 Then MsgBox "マイナスにはできません!", vbCritical End If End Sub としましたら、0になった瞬間にメッセージがでてしまいます。 If SpinButton1 < 0 Then としたら、マイナスにはならないので当たり前ですが何も出ません。 どうしたらいいでしょうか?

  • エクセルをVBAでOUTLOOKで送信したい(再)

    数年前にエクセルをPDFにして添付ファイルとしてOUTLOOKで送信するコードを教えてもらって毎日のように便利に使っているのですが、今回は元のマクロ付きエクセルのまま同じことがしたく、試行錯誤でpdfをxlmsに変えてみたら、メールは起動して来るのですが 「ファイルが見つかりません」とエクセルが添付されません。 どなたかどこを修正すれば良いのかHELPお願いします。 Option Explicit Sub Saveaspdfandsend() Dim xSht As Worksheet 'Dim xFileDlg As FileDialog Dim xFolder As String 'Dim xYesorNo As Integer Dim xOutlookObj As Object Dim xEmailObj As Object Dim xUsedRng As Range Const PdfDir = "\\XXXX\TEST報告書成績表" 'PDFを保存するフォルダー Set xSht = ActiveSheet 'Set xFileDlg = Application.FileDialog(msoFileDialogFolderPicker) ' 'If xFileDlg.Show = True Then '  xFolder = xFileDlg.SelectedItems(1) 'Else '  MsgBox "You must specify a folder to save the PDF into." & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Must Specify Destination Folder" '  Exit Sub 'End If xFolder = PdfDir & "\" & xSht.Cells(22, 5).Value & " " & xSht.Cells(1, 1).Value & ".pdf" 'Check if file already exist 'If Len(Dir(xFolder)) > 0 Then '  xYesorNo = MsgBox(xFolder & " already exists." & vbCrLf & vbCrLf & "Do you want to overwrite it?", _ '           vbYesNo + vbQuestion, "File Exists") '  On Error Resume Next '  If xYesorNo = vbYes Then '    Kill xFolder '  Else '    MsgBox "if you don't overwrite the existing PDF, I can't continue." _ '          & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Exiting Macro" '    Exit Sub '  End If '  If Err.Number <> 0 Then '    MsgBox "Unable to delete existing file. Please make sure the file is not open or write protected." _ '          & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Unable to Delete File" '    Exit Sub '  End If 'End If Set xUsedRng = xSht.UsedRange If Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0 Then 'Save as PDF file xSht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=xFolder, Quality:=xlQualityStandard 'Create Outlook email Set xOutlookObj = CreateObject("Outlook.Application") Set xEmailObj = xOutlookObj.CreateItem(0) With xEmailObj .Display .To = "-----.co.jp" .CC = "----.co.jp" .Subject = "XXX報告書" & " " & Range("D10") .Body = "お疲れ様です。" & vbLf & "表題の件、添付の通りです。 " & vbLf & " " & vbLf & "営業部" .Attachments.Add xFolder 'If DisplayEmail = False Then '.Send 'End If End With Else MsgBox "The active worksheet cannot be blank" Exit Sub End If End Sub