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

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

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

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

2回答

1193閲覧

特定の条件に当てはまるループ序数(1回)を境に処理を分ける方法

Mai0429

総合スコア15

VBA

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/02/13 04:14

以下のコードで、
Flg="/(BB)"の時の変数lを別の変数mに代入する方法
を知りたいです。

以下は、変数lを配列Itemsのインデックス番号として利用しているループ構文です。
lが特定の条件に当てはまるとき(要素の行頭5字が/(BB)の時)、そのループ序数以上か、以下か、で処理を分けたいです。
Items配列中、/(BB)は1回のみのため、mは1つの数字に定まります。

vba

1Sub LoopTestMacro() 2Dim l As Integer, m As Integer, Origin 3Origin = "あいうえお、かきくけ、さしす、せそなにぬ、たちつ、/(BB)たちつて、なにぬね" 4Dim Items: Items = Split(Origin, "、") 5 6For l = 0 To UBound(Items) 7 Flg = Mid(Items(l), 1, 5) 8 If Flg = "/(BB)" Then 9 m = l 10 End If 11 12Next l 13 14If l < m Then 15 ActiveSheet.Range("A" & l).Value = "AA" 16 ElseIf l >= m Then 17 ActiveSheet.Range("A" & l).Value = "BB" 18 End If 19 20End Sub 21

現状のコードでは、m=lの時しかmにlが代入されないため、"たちつて"の行しかBBと示さ
れません。
'"たちつて"と"なにぬね"にBBを表示し、それ以外はAAを表示したいです。
実際はItemsの個数は不明のため、直接指定する方法は無しでお願いします。
最初に/BBで分けて別配列に挿入する方法も無しでお願いします。
実際は既に他部分と合わせて各要素が分かれて格納されてしまっているためです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

フラグっていうかこういうのなんていうんですかね。。。。。?

ExcelVBA

1Sub test001() 2 Dim v 3 Dim strFlg As String 4 Dim ix As Long 5 Const cOrigin As String = "あいうえお、かきくけ、さしす、せそなにぬ、たちつ、/(BB)たちつて、なにぬね" 6 Const cKey As String = "/(BB)" 7 8 strFlg = "AA" 9 For Each v In Split(cOrigin, "、") 10 If InStr(1, v, cKey) Then strFlg = "BB" 11 ix = ix + 1 12 Range("A1")(ix).Value = strFlg 13 Next 14End Sub

あ、

要素の行頭5字が/(BB)の時

前方一致でしたか。。。。Like演算子でやった方がいいのかな。。。。

投稿2020/02/13 06:03

編集2020/02/13 06:08
mattuwan

総合スコア2136

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

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

0

やりたいことがよく分からないですが、
下記のようなことでしょうか。

vba

1Sub LoopTestMacro() 2 Dim l As Integer, Origin As String, Item As String, Flg As Boolean 3 Origin = "あいうえお、かきくけ、さしす、せそなにぬ、たちつ、/(BB)たちつて、なにぬね" 4 Dim Items: Items = Split(Origin, "、") 5 Flg = False 6 7 For l = 0 To UBound(Items) 8 If Mid(Items(l), 1, 5) = "/(BB)" Then 9 Flg = True 10 End If 11 If Flg = True Then 12 ActiveSheet.Range("A" & l + 1).Value = "BB" 13 Else 14 ActiveSheet.Range("A" & l + 1).Value = "AA" 15 End If 16 Next l 17End Sub

投稿2020/02/13 04:35

hatena19

総合スコア33790

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

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

ttyp03

2020/02/13 05:14

もはやFlgすら要らないんじゃないかと思いますが。
ttyp03

2020/02/13 05:58

いや、訂正。"/(BB)"以降をBBにしてるのね。問題ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問