• 締切済み

VBA初心者です。教えてください

jcctairaの回答

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

nayanndemasu3さん はじめまして。 プログラムは「見やすさ」と「正確さ」が重要だと思います。 下記のようにプログラムを修正してみました。 主な所を説明します。 1.関数化  関数にしておけばEXCELのユーザ関数でも使用できるし、他の人が同様な処理を使用する時  このまま関数を複写すれば使える等…結構使いやすくなります。 2.見やすさ  ・見やすいと修正があっても間違いが少ないです。   IF~ElseIF~End If 文よりSelect case 文の方がわかりやすくなることが多いと思います。  ・個人的ですが    Case 列13 = "△" And (列14 => 0.00000001 And 列14 <= 0.0000099) とするより変数を真ん中にするとイメージが 0.00000001 ~ 0.0000099 になり分かりやすい気が…    Case 列13 = "△" And (0.00000001 <= 列14 And 列14 <= 0.0000099)   3.正確さ  K13が○で K14が0.00000991 (最後に1をつけています)の場合、Caseから抜けてしまいます。     Case 列13 = "○" And 列14 <= 0.0000099       判断 = "B"     Case 列13 = "○" And 列14 <= 0.0002       判断 = "C"   とした方が、Caseから漏れることはないと思います。   Sub test()   Range("K15") = 判断(Range("K13"), Range("K14"))   Range("L15") = 判断(Range("L13"), Range("L14"))   Range("M15") = 判断(Range("M13"), Range("M14")) End Sub Function 判断(列13 As Variant, 列14 As Variant) As String   Select Case True     Case 列13 = ""       判断 = ""     Case 列13 = "○" And 列14 <= 0.00000001       判断 = "A"     Case 列13 = "○" And 列14 <= 0.0000099       判断 = "B"     Case 列13 = "○" And 列14 <= 0.0002       判断 = "C"     Case 列13 = "○" And 列14 <= 0.099       判断 = "D"     Case 列13 = "△" And (0.00000001 <= 列14 And 列14 <= 0.0000099)       判断 = "D"     Case 列13 = "△" And (0.0002 <= 列14 And 列14 <= 0.077)       判断 = "D"     Case 列13 = "×"       判断 = "E"     Case Else       判断 = "D"   End Select End Function 余談ですが、上記のロジックだと以下のCase文でも良いのように思いますが… 結果が"D"の判断は要らないように思えます。 Function 判断(列13 As Variant, 列14 As Variant) As String   Select Case True     Case 列13 = ""       判断 = ""     Case 列13 = "○" And 列14 <= 0.00000001       判断 = "A"     Case 列13 = "○" And 列14 <= 0.0000099       判断 = "B"     Case 列13 = "○" And 列14 <= 0.0002       判断 = "C"     Case 列13 = "×"       判断 = "E"     Case Else       判断 = "D"   End Select End Function 以上です。頑張ってVBAを勉強して下さい。

nayanndemasu3
質問者

お礼

こんな初心者に、ご丁寧に回答いただき有難うございます。 早速、試してみました。 思い通りの内容に驚いています。 本当に、有難うございました。

関連するQ&A

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • Excel VBA

    VBAでセルF1に数式を入れようと次のようにしました。 Range("F1").Formula = "=if(D4=" & """"",""""" & ",JIS(PHONETIC(D4)))" 実行したところ、F1セルは「#NAME?」と表示されてしまいます。 F1セルの数式バーには、きちんと、「=if(D4="","",JIS(PHONETIC(D4)))」となっています。 この数式を数式バー内で一度選択してリターンキーで決定するときちんとD4セルのふりがなが入ります。 これまでにも、数式を入れたことはあったのですが、こんなことにはなりませんでした。 今回は、なぜ正しい関数式が入ってもきちんと表示されないのか分かりません。 よろしくお願いします。

  • VBA初心者です。

    VBA初心者です。 Excel 2010のVBAで、 ワークシートのSheet1のオブジェクトモジュールに 他のシートから別のシートにコピー&ペーストをしたいと思い、 以下のプログラムの記述をすると、 アプリケーション定義またはオブジェクトの定義エラーとなってしまいます。 Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)).Copy Destination:=Worksheets("Sheet3").Cells(3, 1) (「d」は変数です。セルの範囲指定は、実際に記述するときは 範囲が広範になるので、行数列数で把握できるようにCellsを使っています) エラーになる理由と解決法をご教授いただければと思います。

  • リンクのVBAを教えてください。

    いつも、御指導ありがとうございます。 売掛金元帳のセル(J3)に数式1で、[得意先登録.xls]得意先登録から社名を表示させています。 ●数式1  '=IF($C$2="","",IF(ISERROR(VLOOKUP($C$2,'C:\Documents and Settings\aaa\My Documents\販売管理 \登録 (台帳)\[得意先登録.xls]得意先登録'!$D$7:$E$65536,2,FALSE)),"未登録です", VLOOKUP($C$2,'C:\Documents and Settings\aaa\My Documents\販売管理 \登録 (台帳)\[得意先登録.xls]得意先登録'!$D$7:$E$65536,2,FALSE))) 売掛金元帳のセル(E2)に数式2で、[自社情報登録.xls]自社情報'!$C$3から自社名を表示させています。 ●数式2  '='C:\Documents and Settings\aaa\My Documents\販売管理\登録 (台帳)\[自社情報登録.xls]自社情報'!$C$3 ●数式1及び数式2をVBAで記述したいのですがど、うしても記述出来ません。 ●まるなげになってしまいますが、数式1及び数式2と、社名変更があった場合は売掛金元帳へ反映させるVBAを教えてください。 宜しく御願いいたします。

  • Excel. Vba

    Vbaでセルの値だけコピーしたいのですが可能でしょうか? 数式を埋め込んだセルに、数値が入力されたセルを形式を値だけ貼り付けにして貼り付けても数式が消えてしまって値だけ入ってます。 数式は消さず、値だけコピーというのはvbaで実現可能でしょうか?

  • VBAのセルのClearについて

    VBA超初心者で、困っていることがあります;; たとえば、プログラムを実行したら、セルの「A1~D3」の範囲をクリアするという物があったとして、 その他の条件が以下のようになっています。 (1)クリアしても、セル内の数式を保持 (2)クリア対象のセルの罫線は残す 私は、以下のように記述したのですが、数式は残るのですが罫線が残りませんでした。 Sheets("シート名").Range("A1:D3").ClearFormats 数式を保持し、罫線を残すようにするには、どのような記述をすれば良いのでしょうか。 以上、よろしくお願いいたします。

  • Excel2007で条件付き書式ルール設定

    セル範囲D7:G32にびっしりと0~9のいずれかの数字がはいってます。 セルK10に0~9の値のいずれかを入れると、その値にセル範囲D7:G32にある同値が反応して黄色くセルが塗り潰されるようにしたいので下記のようにやってみました。 条件付き書式で数式を使用…決定で =AND(D6=$K10,$K10<>″″)で黄色く塗り潰してOK、 適用先はD6:G32としました。 でも上手くいきませんでした。 どのようにすれば上手くいけますかね。

  • 【Excel】複数条件の論理式をVBAマクロでオートフィルするには?【エクセル】

    セルF2からF5000までは =VLOOKUP(C2,sp_csv!C:H,6,0) という関数をオートフィルで入力できるようにマクロを組みました。 Sub Macro1() セル範囲 = "F2:F5000" 数式 = "=VLOOKUP(C2,sp_csv!C:H,6,0)" Range(セル範囲).Formula = 数式 End Sub 同様にセルG2からG5000は =IF(AND(E2>0,F2=0),"削除",IF(AND(E2=0,F2>0),"新規","変動なし")) という関数を入れてオートフィルさせたいのですが、コンパイルエラーが出てしまいます。 Sub Macro2() セル範囲 = "G2:G5000" 数式 = "=IF(AND(E2>0,F2=0),"削除",IF(AND(E2=0,F2>0),"新規","変動なし"))" Range(セル範囲).Formula = 数式 End Sub 複数条件の論理式をVBAマクロでオートフィルするにはどうしたらいいのでしょうか?

  • EXCEL VBAの シートへのデータの表示

    とても単純な条件式なのですが、 どうしても値が表示されるセルとされないセルがあります。 どうしたらよいのでしょうか? 下記のような指定をしています。    K3Sa2D、K3SaWDは変数で値は入っています。(デバッグモードで確認)    しかしQ68のセルは表示されるのに、L72には表示されません。    シートもSelectしています。 If K3Sa2D > 0 Then Range("Q68") = Range("Q68") + K3Sa2D ElseIf K3SaWD > 0 Then Range("L72") = Range("L72") + K3SaWD End If 単純なことかもしれませんが、宜しくお願いします。 どうか対応をおねがいします!

  • Excel VBAでの関数の使い方を教えてください

    いつもお世話になっております Excelシートのあるセルに、 =COUNTIF(K321:K336,"○") のような関数を挿入してあります。 行挿入する毎に、K321:K336の範囲指定部分を 1つずつ増やしていきたい(k322:k337のように・・)のですが VBAでは、どのように記述すればよいのでしょうか よろしくお願いします