[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
If Range("A" & i) = Range("O" & i) & Range("P" & i) Then
に直しました、あぎろぐろっしゃーさんありがとう
もういっこエラーが
If ComboBox1.Value = "あいう" Then
オブジェクトが必要です
教えてくれませんか?
(いちご) 2020/06/30(火) 11:15
(あぎろぐろっしゃー) 2020/06/30(火) 11:23
(いちご) 2020/06/30(火) 11:52
(いちご) 2020/06/30(火) 13:07
回答ではありませんが
If ComboBox1.Valueの .Value削除したらエラーなくなりましたよ
でもRange("D" & i) = Range("Q" & i)にはならなかったので
他に原因があるのだと思います
私も知りたいです
(お茶) 2020/06/30(火) 14:05
Excelが無いと言っているのだから、コンボコントロールの名前を確認してみるとか、その情報だけで自分でデバッグしないとですよ。 第3者では、想像で答えるしかないです。
(???) 2020/06/30(火) 14:28
コンボコントトールの名前ってオブジェクト名で大丈夫ですか?
あんまり詳しくないので変だったら教えてください
コンボボックスのコードは
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
そうなると、マクロを別シートや標準モジュール等に書いたとかでは? コンボを配置したシートのシートモジュール(デザインモードにしておき、コントロールをダブルクリックするとコードが表示されるところ)に書かないと駄目ですよ。 自分で間違いに気づくしかないです。
(???) 2020/06/30(火) 14:59
自分ではどうしたらいいかわからなかたったから嬉しいです
???さんありがとうございます
(いちご) 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.