🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

解決済

2回答

1728閲覧

Splitを使用した変数の最大値で表示を指定したい

Chif

総合スコア5

VBA

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

0グッド

1クリップ

投稿2019/09/21 06:13

編集2019/09/21 07:24

前提・実現したいこと

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,
AZ
BZ
CZ
DZ
EZ

列1列2列3列4列5
1,2,3,
AZA
BZB
CZZ
DZ
EZ
### 発生している問題・エラーメッセージ

ですが、数値個数が変動する為かZの表示が最大値の次の行に表示されてしまいます。

列1列2列3列4列5
1,2,3,
AZA
BZB
CZC
DZZ
EZ
### 該当のソースコード
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,」の最後のカンマが無いことで最大値が" "と認識されない為かと思いましたが、それだと現在発生の表になってしまいました。

お手数ですがご教示頂きたいです…

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

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

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

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

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

meg_

2019/09/21 06:26

・コードのレイアウトがくずれて見づらいので修正ください。 ・コードを1行ずつデバッグ実行されてはどうでしょうか?
Chif

2019/09/21 06:36

そのままに貼り付けてしまっていましたね、失礼いたしました。。 デバックに関しては実行済みでした。ありがとうございます。
otn

2019/09/21 06:58

コードと、セルの絵が合っていないので、合わせてください。 あと、 > 最大値(最後の変数) とのことですが、プログラムでは数値の最大値を見るのか、最後の数値をみるのか、どちらですか? 1,2,3 でなく、1,3,2 のようなケースの場合の話です。
meg_

2019/09/21 07:12

デバックされたのであれば、何故④のところで処理が実行されたのか判明していますよね? まずはそこを修正すれば良いです。
Chif

2019/09/21 07:27

完全にセルとコードが異なっていました、、、失礼致しました。。ご指摘下さいましてありがとうございます。 最後の数値、の意味合いとなりまして、 1,3,2の場合ですと2がZになってほしい所となります。 とても分かりずらく申し訳ないです・・・
guest

回答2

0

ベストアンサー

VBA

1Sub foo() 2Dim Result As Variant 3Dim i As Long, last As Long 4 5Result = Split(Range("A1"), ",") '[1,2,3,] 6 7For i = LBound(Result) To UBound(Result) 8 If IsNumeric(Result(i)) Then 9 last = i 10 Range("E" & 3 + i) = Range("B" & 3 + i) 11 End If 12Next i 13Range("E" & 3 + last) = Range("C" & 3 + last) 14End Sub

ですかね。

投稿2019/09/21 07:41

編集2019/09/21 07:43
otn

総合スコア85888

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

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

Chif

2019/09/21 07:48

lastを定義するという発想が無かったです… ありがとうございます、とても助かりました!
otn

2019/09/21 10:35

別の考え方としては、添え字の大きいほうから処理するというのがあります。
guest

0

回答ではありません。セルのレイアウトが判らないので、添付図のような画像で提示していたけませんでしょうか。あなたが提示された例を見ると、以下のようなレイアウトに見えます。
添付図

投稿2019/09/21 07:30

編集2019/09/21 07:37
tatsu99

総合スコア5493

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

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

Chif

2019/09/21 07:39

ありがとうございます、まさにこちらの状態です 表がわかりずらく大変お手数をおかけします・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問