前提・実現したいこと
VBAで1セル内の数値をSplitを使用して変数に入れています。(数値の個数は最大5つまで変動あり)
例えば列1の1行目に「1,2,3,」と入力されているものを「,」でsplitし変数Resultへ入れ、
その変数が1つ目であればA、2つ目であればB・・・と列2の数値をセルに表示させ、最大値(最後の変数)の場合のみ表示を列3のZにしたいです
例
列1 | 列2 | 列3 | 列4 |
---|---|---|---|
1,2,3, | |||
① | A | Z | |
② | B | Z | |
③ | C | Z | |
④ | D | Z | |
⑤ | E | Z |
↓
列1 | 列2 | 列3 | 列4 | 列5 |
---|---|---|---|---|
1,2,3, | ||||
① | A | Z | → | A |
② | B | Z | → | B |
③ | C | Z | → | Z |
④ | D | Z | → | |
⑤ | E | Z | → | |
### 発生している問題・エラーメッセージ |
ですが、数値個数が変動する為かZの表示が最大値の次の行に表示されてしまいます。
列1 | 列2 | 列3 | 列4 | 列5 |
---|---|---|---|---|
1,2,3, | ||||
① | A | Z | → | A |
② | B | Z | → | B |
③ | C | Z | → | C |
④ | D | Z | → | Z |
⑤ | E | Z | → | |
### 該当のソースコード |
Dim Result As Variant Dim i As Long Do Result = Split(Range("列1" & 1 ), ",") '[1,2,3,] i = 0 For i = LBound(Result) To UBound(Result) If Result(i) = "" Then Range("列5" & 3 + i) = Range("列3" & 3 + i) ElseIf Result(i) = LBound(Result) Then Range("列5" & 3 + i) = Range("列2" & 3 + i) End If Next i Exit Do Loop End Sub
最初は「1,2,3,」の最後のカンマが無いことで最大値が" "と認識されない為かと思いましたが、それだと現在発生の表になってしまいました。
お手数ですがご教示頂きたいです…
・コードのレイアウトがくずれて見づらいので修正ください。
・コードを1行ずつデバッグ実行されてはどうでしょうか?
そのままに貼り付けてしまっていましたね、失礼いたしました。。
デバックに関しては実行済みでした。ありがとうございます。
コードと、セルの絵が合っていないので、合わせてください。
あと、
> 最大値(最後の変数)
とのことですが、プログラムでは数値の最大値を見るのか、最後の数値をみるのか、どちらですか?
1,2,3 でなく、1,3,2 のようなケースの場合の話です。
デバックされたのであれば、何故④のところで処理が実行されたのか判明していますよね? まずはそこを修正すれば良いです。
完全にセルとコードが異なっていました、、、失礼致しました。。ご指摘下さいましてありがとうございます。
最後の数値、の意味合いとなりまして、
1,3,2の場合ですと2がZになってほしい所となります。
とても分かりずらく申し訳ないです・・・
回答2件
あなたの回答
tips
プレビュー