質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

25870閲覧

初歩的な点で躓いています 実行すると「型が一致しません」というエラーが出ます

yuuy

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/04/24 04:25

VBAを少し勉強しまして、現在業務で使用するエクセルの表の分類・入力を楽にするために「セルH11~H300のどれか一つに『携帯ショップスタッフ』を入力すると、J11~300の対応するセルに『時給1000円~1500円』が入力される(例えばH12に入力をしたらJ12に入力される)」というものを作成しているのですが。
実行すると「実行時エラー13:型が一致しません」というものが出ます。
コードは以下のものです。

Sub 求人内容ごとによる給与の振り分け()
If Range("H11:H300").Value = "携帯ショップスタッフ" Then
Range("J11:J300").Value = "時給1000円~1500円"
End If
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Rangeを使った場合、valueへまとめて代入することはできますが、判定することはできません(そこでエラーが発生していると思います)
なので、1セルごとに値を判定して、一致してれば代入、という処理を行う必要があります。

VBA

1Sub 求人内容ごとによる給与の振り分け() 2 For Each c In Range("H11:H300") 3 If c.Value = "携帯ショップスタッフ" Then 4 Cells(c.Row, 10).Value = "時給1000円~1500円" 5 End If 6 Next 7End Sub 8

投稿2017/04/24 04:38

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuy

2017/04/24 05:16

参考になりました。 ありがとうございます。
yuuy

2017/04/24 07:15 編集

解決したとお伝えした後からすみません。 こちらのコードを実行したところ、 J12以降からは"時給1000円~1500円"が入力されるのですが、 J11に"携帯ショップスタッフ" と入力をしても"時給1000円~1500円"が 表示されないです。 VBAの入力をし直すと表示される場合があるのですが… 何度も申し訳ありません
ttyp03

2017/04/24 07:15

J11ではなくH11ではないのですか? "携帯ショップスタッフ"か判定する列→H列 "時給1000円~1500円"と入力する列→J列
yuuy

2017/04/24 07:16

すみませんH11に"携帯ショップスタッフ" と入力でした。
ttyp03

2017/04/24 07:21

ん?H11に入れてるけど、ってことでしょうか。 "携帯ショップスタッフ"の文字列が正しいか、前後に空白が入っていないかなどご確認ください。
yuuy

2017/04/24 07:29 編集

はいその通りです。 確認をしましたところ空白が入っていたみたいです。 お騒がせして申し訳ありませんでした。 評価を追加しました。 ありがとうございます。
guest

0

入力に対応させたいのであれば、Changeイベントを利用する方法もあります。

VBA

1 2Private Sub Worksheet_Change(ByVal Target As Range) 3 4 Select Case Target.Column 5 Case 8 6 Select Case Target.Row 7 Case 11 To 300 8 If Target.Value = "携帯ショップスタッフ" Then 9 Cells(Target.Row, "J") = "時給1000円~1500円" 10 End If 11 End Select 12 End Select 13 14End Sub 15

ただし、上記コードは以下の場合に対応していません。

・複数のセルに「携帯ショップスタッフ」とペーストした場合。
・H列を含む複数の列に同ワードをペーストした場合。

総じて考えると、ttyp03さんの案がよいように思います。

参考まで。

投稿2017/04/24 04:55

Wolf

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuy

2017/04/24 05:17

参考になりました。 ありがとうございます。
guest

0

Range("H11:H300")は「セルH11~H300のどれか一つ」を指すのではなく「セルH11~H300の全ての値を格納した配列」を指します。
参考

配列は文字列との比較ができませんので、「型が一致しません」というエラーになっていると思われます。

コードとしてはttyp03さんのコードが良いと思います。Range("H11:H300")が指す配列の要素ごとにループさせ、一つのセルごとに処理を行っています。

投稿2017/04/24 04:43

akabee

総合スコア1947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuy

2017/04/24 05:17

参考になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問