[[20200630101349]] 『If 文』(いちご) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『If 文』(いちご)

データを比較する表を作成してます

コードと商品名が一致したらコンボボックスの値に応じて列に入力します

	A	B	C	D		O	P	Q
1								
2								
3		コード	商品名			コード	商品名	金額

O、P、Qがデータ、B〜が比較表です
商品名だけだと同じものがあります、コードの無い商品名があるので
区別するためにA列を「=B&C」してます

AとO&Pが一致していたらというところが赤字で構文エラーが出ました
教えてくれませんか?

 Sub 一致()

Dim i As Long

For i = 4 To Cells(Rows.Count, "A").End(xlUp).Row

If ComboBox1.Value = "あいう" Then

   If Range("A" & i) = Range("O"&i)&Range("P"&i)

      Range("D" & i) = Range("Q" & i)

   End If

ElseIf ComboBox1.Value = "かきく" Then

  If Range("A" & i) = Range("O"&i)&Range("P"&i)

      Range("E" & i) = Range("Q" & i)

   End If

ElseIf ComboBox1.Value = "さしす" Then

 If Range("A" & i) = Range("O"&i)&Range("P"&i)

      Range("F" & i) = Range("Q" & i)

   End If

・・・・
End Sub

< 使用 Excel:Excel2019、使用 OS:Windows10 >


パっと見ですが

 「Then」が抜けてる
 「&」の前後にスペースが無い

これを直してみてください。
(あぎろぐろっしゃー) 2020/06/30(火) 10:37


構文に従って記述せよ
(猿でもわかる) 2020/06/30(火) 10:48

  If Range("A" & i) = Range("O" & i) & Range("P" & i) Then
に直しました、あぎろぐろっしゃーさんありがとう

もういっこエラーが
 If ComboBox1.Value = "あいう" Then
オブジェクトが必要です

教えてくれませんか?
(いちご) 2020/06/30(火) 11:15


ComboBox1が設定てされているのか。見直せ。
(猿でもわかる) 2020/06/30(火) 11:19

そのコードを書いている場所(Module1?UserForm1?Sheet1?)で認識できるComboBox1がありません。

(あぎろぐろっしゃー) 2020/06/30(火) 11:23


あぎろぐろっしゃーさん、sheetにコンボボックスを作ってます
同じsheetです

(いちご) 2020/06/30(火) 11:52


コンボボックスはあります
リストも選択できます

(いちご) 2020/06/30(火) 13:07


これからActivXでコンボボックスを作るのみ参考にしてます

回答ではありませんが
If ComboBox1.Valueの .Value削除したらエラーなくなりましたよ
でもRange("D" & i) = Range("Q" & i)にはならなかったので
他に原因があるのだと思います
私も知りたいです

(お茶) 2020/06/30(火) 14:05


ComboBox1は、ActiveXのコンボコントロールがデフォルトで1つ目に付ける名前ですが、1つ目ではないので数字が違うとか、別名に変えたとか、実はフォームコントロールの方を貼っていたとかありませんか?

Excelが無いと言っているのだから、コンボコントロールの名前を確認してみるとか、その情報だけで自分でデバッグしないとですよ。 第3者では、想像で答えるしかないです。
(???) 2020/06/30(火) 14:28


ActiveXコントロールのコンボボックスからデータと同じsheetに作りました
コンボボックスはひとつしか作ってなくて、プロパティのオブジェクト名も
ComboBox1でした
一応オブジェクト名をコピーしてコードに貼り付けたけどエラーでした

コンボコントトールの名前ってオブジェクト名で大丈夫ですか?
あんまり詳しくないので変だったら教えてください

コンボボックスのコードは
 
 
Private Sub ComboBox1_DropButtonClick()

    ComboBox1.List = Array()

    ComboBox1.AddItem "あいう"
    ComboBox1.AddItem "かきく"
    ComboBox1.AddItem "さしす"
    ComboBox1.AddItem "たちつ"
    ComboBox1.AddItem "なにむ"
    ComboBox1.AddItem "はひふ"
    ComboBox1.AddItem "まみむ"
    ComboBox1.AddItem "やゆよ"

End Sub

(いちご) 2020/06/30(火) 14:39


オブジェクト名がComboBox1で正しいです。 マクロも正しいようですね。 ちゃんと動きましたよ。

そうなると、マクロを別シートや標準モジュール等に書いたとかでは? コンボを配置したシートのシートモジュール(デザインモードにしておき、コントロールをダブルクリックするとコードが表示されるところ)に書かないと駄目ですよ。 自分で間違いに気づくしかないです。
(???) 2020/06/30(火) 14:59


マクロはマクロの記録でいつも書いてたんでモジュール1になってました
sheetにコードを貼り付けたら動くようなりましたよ

自分ではどうしたらいいかわからなかたったから嬉しいです
???さんありがとうございます

(いちご) 2020/06/30(火) 15:49


解決したようなので完全に余談ですし、もう見てないかもですが。

■1
そもそもの質問の部分は、IFステートメントでThenつけ忘れていたので、構文エラーになっただけですね。
↓では出来ているのでうっかりミスでしょうか。

 If ComboBox1.Value = "あいう" Then

ちなみに本当にVBE上で、提示されているとおりに記述したなら

 コンパイルエラー
 修正候補 Then または Goto

ってExcel君が教えてくれませんでしたか?

■2
>sheetにコードを貼り付けたら動くようなりましたよ
結局、シートにActiveXコントロールのオブジェクト"ComboBox1"を配置していたのですね。
そして、"標準モジュール"でシートを省略したために、エクセル君は何に属する"ComboBox1"なのかわからなくてエラーになっていたということですよね。
たしかに、シートモジュールに記述することも一つの解決策だとはおもいますが、標準モジュールであっても対象シートさえちゃんと指定していれば問題なかったと思います。

    Sub さんぷる()
        Dim i As Long
        With Worksheets("Sheet1")
            For i = 4 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .ComboBox1.Value = "あいう" Then
                    If .Range("A" & i) = .Range("O" & i) & .Range("P" & i) Then
                        Range("D" & i) = Range("Q" & i)
                    End If

                ElseIf .ComboBox1.Value = "かきく" Then
                    If .Range("A" & i) = .Range("O" & i) & .Range("P" & i) Then
                        .Range("E" & i) = .Range("Q" & i)
                    End If

                ElseIf .ComboBox1.Value = "さしす" Then
                    If .Range("A" & i) = .Range("O" & i) & .Range("P" & i) Then
                        .Range("F" & i) = .Range("Q" & i)
                    End If
                End If
            Next i

        End With

■3
ちなみに判定の順番を変えて↓のようにしてみると、メンテナンスが楽かもしれませんね。

    Sub さんぷる2()
        Dim i As Long
        With Worksheets("Sheet1")
            For i = 4 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Range("A" & i) = .Range("O" & i) & .Range("P" & i) Then
                    If .ComboBox1.Value = "あいう" Then Range("D" & i) = Range("Q" & i)
                    If .ComboBox1.Value = "かきく" Then Range("E" & i) = Range("Q" & i)
                    If .ComboBox1.Value = "さしす" Then Range("F" & i) = Range("Q" & i)
                End If
            Next i
        End With
    End Sub
    '---------------------------------------------------------------------------------
    Sub さんぷる3()
        Dim i As Long
        With Worksheets("Sheet1")
            For i = 4 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Range("A" & i) = .Range("O" & i) & .Range("P" & i) Then
                    Select Case .ComboBox1.Value
                        Case Is = "あいう"
                            Range("D" & i) = Range("Q" & i)
                        Case Is = "かきく"
                            Range("E" & i) = Range("Q" & i)
                        Case Is = "さしす"
                            Range("F" & i) = Range("Q" & i)
                    End Select
                End If
            Next i
        End With
    End Sub

■4
さらに、あらかじめリストが分かっているのであれば、こんな感じでもよいとおもいます。

    Sub さんぷる4()
        Dim i As Long
        Dim 配列 As Variant
        Dim 列番号 As Variant

        配列 = Array("あいう", "かきく", "さしす", "たちつ", "なにぬ", "はひふ", "まみむ", "やゆよ")

        With Worksheets("Sheet1")
            列番号 = Application.Match(.ComboBox1.Value, 配列, 0)

            If Not IsError(列番号) Then
                 For i = 4 To .Cells(.Rows.Count, "A").End(xlUp).Row
                    If .Range("A" & i) = .Range("O" & i) & .Range("P" & i) Then
                        .Cells(i, 列番号 + 3).Value = Range("Q" & i).Value
                    End If
                Next i
            End If
        End With
    End Sub

(もこな2 ) 2020/07/01(水) 06:22


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.