• ベストアンサー

EXCELのマクロに関する質問です

アクティブなワークブックの名前に応じて処理を変更したいと思い以下のような記述をしたところ「型が一致しません」とエラーが出てしまいました。これは何がいけないのでしょうか。 デバッグモードで4行目のIfからThenまでが黄色く表示されます。 OSはWindows2000を使っています。よろしくお願いします。 Dim FN as String Dim p2 as Single FN = ActiveWorkbook.Name If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then p2 = p2 * 0.001 End If (アクティブなワークブックの名前がAAA、CCC、EEE、GGGのいずれでもないならば、p2に0.001を乗じる処理です。Dim FN as Variantと変更して試してみても同じエラーが出ました)

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

  • ベストアンサー
  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then ですけれどこのような簡略な書き方はできません。 If FN <> "AAA" Or Fn<>"CCC" Or FN<>"EEE" Or FN<>"GGG" Then となるはずです。

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

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

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

#5 ですが、、ごめんなさい。 #2 の方と内容が同じでしたね。スルーして下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

こんばんは。 幾つも条件を列挙する場合は、Select Case を使うとスッキリするかな? メンテも楽だし。   Select Case FN     Case "AAA", "CCC", "EEE", "GGG"        ' 何もしない     Case Else        p2 = p2 * 0.001   End Select あと補足すると... VBA で文字列比較する場合は原則的に大文字と小文字を区別します。 できるだけ直接比較しないようにした方が良いでしょう。 例えば、上記コードだと Aaa でスルーしちゃいます。 そこで、StrComp で比較するか、Ucase または Lcase 関数などで 文字の大文字・小文字を統一してから比較するようにします。   ' 大文字に統一して比較する場合   Select Case UCase$(FN)     Case "AAA", "CCC", "EEE", "GGG" 限られた場面で使うコードなら気にする必要はありませんが、 汎用的なコードを書こうと思った場合には注意したい点だと思います。 ここで言う汎用とは、FN = ActiveWorkbook.Name の返す値で、 拡張子が大文字だったり小文字だったりで結果が異なるのを防ぐとか ...ですね。

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

すでに回答は出ていると思いますが >If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then のように否定形の複合条件は後でデバッグのとき間違えやすいです。 If FN = "AAA" Or FN ="CCC" Or FN ="EEE" Or FN ="GGG" Then Else  p2 = P2 * .001 End If の方が直感的に理解できませんか

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

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

あの~その~ 割り込んじゃいますね(笑) <> を連結(この言葉が妥当かどうか?)するときは and でないと・・・ If FN <> "AAA" and Fn<>"CCC" and FN<>"EEE" and FN<>"GGG" Then にしないと、 全部 p2 = p2 * 0.001 を処理してしまいます。 #1のベテランさんの只のチョイミスです。 suzukikunさん、あげあしを取ってすみません、余計なお世話でした。(コソコソ)

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

Dim p2 as Single Select Case ActiveWorkbook.Name Case "AAA","CCC","EEE","GGG" Case Else p2 = p2 * 0.001 End Select

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

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

関連するQ&A

  • エクセルのマクロについて教えて下さい。

    エクセルのマクロについて教えて下さい。 Sub Ref() Dim ax As String Dim num As Integer, i As Integer Dim arr As Variant Dim tex As String Range("A1").Select ax = ActiveCell.Formula arr = Split(ax, ",") For i = 0 To UBound(arr) num = i + 1 Cells(num, 1).Value = arr(i) Next i For i = 1 To 10 ActiveCell.Offset(, 1).Select tex = ActiveCell.Formula Selection.Resize(num, 1).Select Selection.Formula = tex Selection.Resize(1, 1).Select Next i End Sub このマクロを10行ほどまで対応させたいです。 例として2行の表ですが、           A         B   C  D   E  F 1 C100,C101,C102,C103 aaa bbb ccc ddd eee 2 C104,C105,C106,C107 とうい表を、     A B  C  D   E   F 1 C100 aaa bbb ccc ddd eee 2 C101 aaa bbb ccc ddd eee 3 C102 aaa bbb ccc ddd eee 4 C103 aaa bbb ccc ddd eee 5 C104 aaa bbb ccc ddd eee 6 C105 aaa bbb ccc ddd eee 7 C106 aaa bbb ccc ddd eee 8 C107 aaa bbb ccc ddd eee という表にしたいです。 結合してから展開しようと考えたのですが 1列目の文字列の最後にカンマが無い場合、ある場合がありまして、 対応する事が出来ませんでした。 マクロ初心者なので教えてください。 よろしくお願いします。

  • エクセルで

    教えてください。2つの表を1つにしたいのです。  あ.xls い.xls aaa 1個 bbb 2個 bbb 2個 ccc 1個 eee 3個    eee 1個 ggg 0個        ↓       う.xls aaa 1個 bbb 4個 ccc 1個 eee 4個 ggg 0個 このような結果を作るにはどうしたらいいでしょうか? 宜しくお願いします。

  • エクセルのマクロについて質問です。

    下の表を展開したいです。    A   B   C  D  E  F  G 1 C102,C103,C104 aaa bbb ccc ddd~ 2 R102,R103,R105 YYY RRR EEE GGG~ 3 R106,R107,R108   空白(上と同じ) 4 空白 5 L102,L103,L105 QQQ MMM NNN BBB~ という表を、 1 C102 aaa bbb ccc ddd 2 C103 aaa bbb ccc ddd 3 C104 aaa bbb ccc ddd 4 R102 YYY RRR EEE GGG というように最後まで展開していきたいです。 下のマクロだとB列以降が全て一番上と同じ文字列がコピーされてしまいます。 よろしくお願いします。 Sub test2() Dim ax As String 'A列のセルに入っているテキストを代入するための変数 Dim ax2 As String 'axを統合したテキストを代入するための変数 Dim num As Integer, i As Integer '回数を代入するための変数 Dim arr As Variant '配列を格納 Dim tex As String 'B列以降の文字列を代入するための変数 'A列にいくつデータが入っているかを確かめ、その数をnumに代入 Range("A1").Select Selection.CurrentRegion.Select num = Selection.Rows.Count Range("A1").Select 'A1のテキストの最後にカンマが入っているかを判定。なければカンマをつける。 'A列のデータが入っている最後のセルまで上記の処理を行う。 '各テキストは変数axに代入、ax2で統合する For i = 1 To num ax = ActiveCell.Text If Right(ax, 1) = "," Then ax = ax Else ax = ax & "," End If If i = 1 Then ax2 = ax Else ax2 = ax2 & ax End If ActiveCell.Offset(1).Select Next i ax2 = Left(ax2, Len(ax2) - 1)  arr = Split(ax2, ",") Range("A1").Select For i = 0 To UBound(arr) num = i + 1 Cells(num, 1).Value = arr(i) Next i Range("A1").Select Selection.CurrentRegion.Select num = Selection.Rows.Count 'B~D列を展開 For i = 1 To 3 ActiveCell.Offset(, 1).Select tex = ActiveCell.Formula Selection.Resize(num, 1).Select Selection.Formula = tex Selection.Resize(1, 1).Select Next i End Sub

  • エクセルのマクロについて

    エクセル97のマクロについて教えてください。 下のようなエクセルシートがあると仮定します。 このシート全体を選択して用意してあるボタンを押すと、マクロが流れるようにします。 マクロの中身は、項目1~4の値が同じであれば、同じデータを一つにするというものを考えています。 たとえば下の例の場合、追番でいえば2と4のデータは同じなので、マクロ処理にかけると、追番の大きい4のデータは消え、2のデータの"200"項目にフラグ1が追加されるようにしたいのです。 項目の値が同じであれば、いくつでもデータを統一したいと考えています。 ================ エクセル シート例 ================================== 追番_項目1_項目2_項目3_項目4_100_200_300_400 ← 見出し ----------------------------------------------------------------- 1****AAA****BBB****CCC****DDD****1*********1****1**** 2****EEE****FFF****CCC****GGG****1**************1**** 3****HHH****FFF****KKK****JJJ****1****1****1********* 4****EEE****FFF****CCC****GGG****1****1*********1**** ↓ マクロ処理後 追番_項目1_項目2_項目3_項目4_100_200_300_400 ← 見出し ----------------------------------------------------------------- 1****AAA****BBB****CCC****DDD****1*********1****1**** 2****EEE****FFF****CCC****GGG****1****1*********1**** 3****HHH****FFF****KKK****JJJ****1****1****1********* =================================================================== 注:見出しの_とデータの中の*は空白を生めるためのもので、データとはまったく 関係ありません。 なにぶんエクセルVBAは初心者同然なもので... よろしくお願い致します。

  • 現在アクティブなワークブック名によって条件分岐させたいのですが

    現在アクティブにしているワークブック名によって条件を分岐させたいのですが、下記のように記述すると「型が一致しません」とエラーが出てしまいます。これは何がおかしいのでしょうか。 (デバックモードでIf~Thenまでが黄色でマークされます) Excel2000を使用しています。よろしくお願いします。 Dim t As Single If ActiveWorkbook.Name="AAA.xls" Or "BBB.xls" _ Or "CCC.xls" then t=3.5

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。

  • VBAでif文にorを使う場合の仕様

    http://www.relief.jp/itnote/archives/vba-if-or.php このページにも書かれてあるのですが、 Sub textss() aaa = 2 If aaa = 0 Or 1 Then bbb = 1 ElseIf aaa = 2 Then bbb = 2 End If ccc = bbb End Sub を実行すると cccには2が代入されそうなのですが、実際には1が代入されてしまいます。 If aaa = 0 Or aaa = 1 Then と入力する必要があります。 それでは、 If aaa = 0 Or 1 Then とした時、プログラムではどういう処理がなされているのでしょうか?

  • 再)excel2000VBAで用紙の上半分部分のみ連続印刷する

    ここで教えていただいた、コードを実行したところ見事連続印刷できましたが、シートの上半分が10枚に印刷されます。10枚だと用紙がもったいないので、2シートづつA4で5枚に収めて印刷したいです。それにはどうしたらよろしいか。ご教示お願いします。 Sub TesSample() Dim mySh As Variant '請求書一括印刷 mySh = Array("AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "EEE", "FFF", "GGG") Worksheets(mySh).Select Worksheets(mySh).PrintPreview Worksheets("hyousi").Select End Sub

  • エクセルマクロでファイルを作れません

    ワークブックを開く時に自動的にxmlファイルを作るマクロを組みました。 しかし、そのマクロを組んだPCでは正常にxmlファイルが作成されますが、 他のPCで試したらxmlファイルが作成されずにエラーになりました。 その【xmlファイルが作成されなかった】理由がわかりません。 例えば、PCのセキュリティで、マクロによるファイルの読み書きの動作が弾かれていたりするのでしょうか。 以下、そのマクロの本文です。 解決の手がかりだけでも掴めましたら教えていただくと嬉しいです。 Private Sub Workbook_Open() ' ワークブックを開く時のイベント 'Cドライブ直下に「あああ.xml」ファイルが存在すれば削除 If Dir("C:\あああ.xml") <> "" Then Kill "C:\あああ.xml" Else End If 'xmlファイルを作成   ' XMLファイル保存先の指定 Dim iFileNum As Integer iFileNum = FreeFile Dim SaveFileName As String SaveFileName = "C:\あああ.xml" Open SaveFileName For Output As #iFileNum  '←ここでエラーになります!! ''xmlファイル本文の作成 Print #iFileNum, "<?xml version=""1.0"" encoding=""UTF-8""?>" Print #iFileNum, "<markers>" Print #iFileNum, "</markers>" '後処理 If iFileNum > 0 Then Close #iFileNum End Sub

  • Excelマクロのオフセットについて

    マクロのセルのオフセットについて質問です。 複数の画像(仮に7枚)を一度に張り付ける際に If ActiveCell.Column = 1 Then ActiveCell.Offset(, 8).Select Else ActiveCell.Offset(4, -8).Select End If このようなマクロ組むと 1 2 3 4 5 6 7 という感じになります。 列は8列空いて、行は4行空くことになると思うのですが これを 1 2 3 4 5 6 7 としたい場合はどのようなマクロの書き方をすればよいのでしょうか? ご指導の程宜しくお願いします。マクロを張り付けておきます。 Declare Function SetCurrentDirectory Lib "kernel32" Alias _ "SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long Sub 画像一括貼り付け() Dim Fname As Variant, fe As Variant Dim Fn As Variant, Pic As Shape Dim pno As Long Dim myFileName As String Range("A8").Select SetCurrentDirectory "P:\投レ+相模原\F-POT KBB42365\外観確認" Fname = Application.GetOpenFilename _ ("jpg,*.jpg,jpeg,*.jpeg,bmp,*.bmp,gif,*.gif,png,*.png", MultiSelect:=True) If Not IsArray(Fname) Then MsgBox "取り消されました。", vbInformation Exit Sub End If Application.ScreenUpdating = False pno = 0 For Each Fn In Fname 'この次へ追加すべき行 Selection.Offset(-1, 0) = Mid(Fn, InStrRev(Fn, "\") + 1, Len(Fn) - InStrRev(Fn, "\")) ActiveCell.Select Set Pic = ActiveSheet.Shapes.AddPicture(Filename:=Fn, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=0, Top:=0, Width:=360, Height:=270) With Pic .ScaleWidth 1, msoTrue .ScaleHeight 1, msoTrue .Top = ActiveCell.Top ' 位置:アクティブセルの上側に重ねる .Left = ActiveCell.Left ' 位置:アクティブセルの左側に重ねる .Placement = xlMove ' 移動するがサイズ変更しない End With If ActiveCell.Column = 1 Then ActiveCell.Offset(, 8).Select Else ActiveCell.Offset(4, -8).Select End If Set Pic = Nothing pno = pno + 1 Next Application.ScreenUpdating = True Range("A1").Select MsgBox pno & "枚の画像を挿入しました", vbInformation End Sub

このQ&Aのポイント
  • EB-W05で画面が映らない問題が発生しています。明かりが暗く、スクリーンにほんのりの光しか映らない状態です。
  • EB-W05の画面が映らない原因は明かりが暗いことが考えられます。スクリーンにはほんのりの光しか映らない状態で、使用に支障があります。
  • EPSONのEB-W05で画面が映らない問題が発生しています。明かりが暗く、スクリーンにはほんのりの光しか映らない状態です。
回答を見る

専門家に質問してみよう