人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル(VBA)について質問です。

IF文をセルに入れて出力をしていたのですが、
セルに入れるIF文の条件式が長すぎて(条件としては25通り程だったのですが)エラーになってしまいました。
この対処法としてマクロを作成できる方おりましたらプログラムを書いて頂ければと考えております。

やりたいことは以下に書いてあることになります。

★プログラム1 ウォッチリスト数とアクセス数を元に商品のレベルをS?Eに振り分ける。

★プログラム2 商品のレベル分けを参考に出品方法をランダムに選択する。

詳しいデータなのですが以下にあります。

http://oskuni7.sakura.ne.jp/PROGRAM.htm

プログラムの処理は上から順番に処理していき、データが空白の部分で処理を終了するようなプログラムが理想になっております。

プログラムを書いて頂いた方にはポイントを多めに支払わせて頂ければと考えております。
よろしくお願いいたします。


●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:VBA アクセス数 ウォッチリスト エクセル エラー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●100ポイント ベストアンサー

ウォッチリストの8、9はどうするのとか、アクセス数は境界はどっちにするの

とか、いくつか仕様があいまいですが、下記のようでどうでしょうか。


先頭行がデータの場合は、★の部分を1に変更ください。


不明な点は、コメントで対応します。

Option Explicit
'-----------------------------------------------
Sub program1()
'-----------------------------------------------
 Dim ll As Long
 ll = 2  '★開始行:タイトル列がなければ1に変更
 
 Do While Cells(ll, "Q").Value <> "" And Cells(ll, "R").Value <> ""
 Cells(ll, "S").Value = itemRank(Cells(ll, "Q").Value, Cells(ll, "R").Value)
 ll = ll + 1
 Loop
End Sub

'-----------------------------------------------
Sub program2()
'-----------------------------------------------
 Dim ll As Long
 ll = 2  '★開始行:タイトル列がなければ1に変更
 
 Do While Cells(ll, "S").Value <> ""
 Cells(ll, "T").Value = itemSelect(Cells(ll, "S").Value)
 ll = ll + 1
 Loop
End Sub


'-----------------------------------------------
Function itemRank(ac As Long, wl As Long) As String
'-----------------------------------------------
 Dim rkArray As Variant
 rkArray = Split("EDBSS/EECSS/DEDAA/SEEBA/SEEBA", "/")
 
 Dim aRK As Integer
 
 aRK = CInt(ac / 25)
 If aRK < 0 Then aRK = 0
 If aRK >= 4 Then aRK = 4
 
 Dim wRK As Integer
 Select Case True
 Case wl <= 1
 wRK = 0
 Case wl <= 3
 wRK = 1
 Case wl <= 5
 wRK = 2
 Case wl <= 7
 wRK = 3
 Case Else
 wRK = 4
 End Select

 itemRank = Mid(rkArray(aRK), wRK + 1, 1)
End Function

'-----------------------------------------------
Function itemSelect(iRank As String) As String
'-----------------------------------------------
 Dim sArray As Variant
 Select Case iRank
 Case "S"
 sArray = Split("?そのまま続行/?値段を1000円・100円・1円にする/?高値回しの見せつけ/?類似商品を勧める/?おまけを付ける", "/")
 Case "A"
 sArray = Split("?そのまま続行/?値段を1000円・100円・1円にする/?高値回しの見せつけ/?類似商品を勧める/?おまけを付ける", "/")
 Case "B"
 sArray = Split("?そのまま続行/?コバンザメ作戦/?高値回しの見せつけ/?類似商品を勧める/?おまけを付ける", "/")
 Case "C"
 sArray = Split("?コバンザメ作戦/?おまけを付ける/?セット作戦", "/")
 Case "D"
 sArray = Split("?おまけを付ける/?セール感覚の均一仕掛け/?セット作戦", "/")
 Case "E"
 sArray = Split("?おまけを付ける/?セール感覚の均一仕掛け/?セット作戦", "/")
 Case Else
 itemSelect = ""
 Exit Function
 End Select
 
 itemSelect = sArray(CInt(Rnd() * 150) Mod (UBound(sArray) + 1))
End Function

http://www.sanynet.ne.jp/~awa/excelvba/kouza.html

◎質問者からの返答

ご回答ありがとうございます^^。

申し訳ありませんが、エラーが一部発生してしまいました。

実行時エラー13 ”型が一致しません”というエラーで以下を修正するように表示されたのですが

Cells(ll, "S").Value = itemRank(Cells(ll, "Q").Value, Cells(ll, "R").Value)

どのように対処すればよろしいでしょうか。

お手数をおかけしますがよろしくお願いいたします。


2 ● Mook
●50ポイント

コメントが無効なので回答で失礼します。


エラーが発生したときに、ll にマウスカーソルをのせると

なんと出ていますか。


その行でエラーが出ているのですが、その行のQ列とR列のデータは

何が入っているのでしょうか。


整数を期待しているので、それ以外のデータが入っているとエラーになるかと思います。

まずは、内容を教えてください。


それから、コメント有効にお願いします。

http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200.html

◎質問者からの返答

ll=4と出ております。

Q列とR列には商品のデータが入っております。

データですが

以下のようになっております。

http://oskuni7.sakura.ne.jp/hatena/webpagejoutai.htm

お手数をおかけし申し訳ございません。


3 ● kaiton
●50ポイント

関数だけでする方法です。

ウォッチリスト数とアクセス数から、それぞれをレベル分けしているところまでは現状どおりとして

http://oskuni7.sakura.ne.jp/PROGRAM.htm

の上の表を、行方向、列方向に名前を付けます。

方法は、先日日記に書いた

http://d.hatena.ne.jp/kaiton/20081105/1225895624

http://officetanaka.net/excel/function/tips/tips30.htm を参考にしてください。

行に「?25以下」等の名前が、列に「?3以下」等の名前が付きます。

#「?0,1」は名前を付けても参照時にエラーになるので、「?0_1」などに変更してください。


http://oskuni7.sakura.ne.jp/hatena/webpagejoutai.htm

S4=INDIRECT(Q4) INDIRECT(R4) とします。


T4=INDEX(INDIRECT(S4),INT(RAND()*COUNTA(INDIRECT(S4)))+1)

◎質問者からの返答

ご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ