Excel VBA 質問スレッド №1948 (未解決)

ループ処理

投稿者 : ちー     投稿日時 : 2024/07/01(Mon) 14:21:22     OS : 未指定     EXCEL : 未指定
1001みずほ
21000
21500
1002三井住友
29000
25555

先頭の数字が1なら、再度1が現れるまで2行目以下は1行目と合体させループ処理する。


001みずほ1000
001みずほ1500
002三井住友9000
002三井住友5555

スポンサーリンク
[返信 1] Re : ループ処理
投稿者 : さんこう     投稿日時 : 2024/07/01(Mon) 14:46:19
>先頭の数字が1なら、再度1が現れるまで2行目以下は1行目と合体させループ処理する。

「例」として書かれているものがなんなのか存じませんが、

「先頭の数字が1なら、再度1が現れるまで2行目以下は1行目と合体させループ処理する」ならこんな感じでしょうか。

Sub a()
    r = 1
    Do While Cells(r, "A") <> ""
        If Left(Cells(r, "A"), 1) = "1" Then
            r0 = r
        Else
            If r0 <> 0 Then Cells(r0, "A") = Cells(r0, "A") & Cells(r, "A")
        End If
        r = r + 1
    Loop
End Sub

[返信 2] Re : ループ処理
投稿者 : higeru     投稿日時 : 2024/07/01(Mon) 15:21:51
 こういうことかな。
 A列にデータがあるとして、B列に1行目から結合した文字列を書き出します。

Sub Sample()
    Dim ia As Long: ia = 1
    Dim ib As Long: ib = 1
    Dim valA As String: valA = Cells(ia, "A")
    Do While valA <> ""
        Dim baseStr As String
        If valA Like "1*" Then
            baseStr = Mid(valA, 2)
        Else
            Cells(ib, "B") = baseStr & Mid(valA, 2)
            ib = ib + 1
        End If
        ia = ia + 1
        valA = Cells(ia, "A")
    Loop
End Sub

[返信 3] Re : ループ処理
投稿者 : ちー     投稿日時 : 2024/07/01(Mon) 15:43:51
1つのデータに、先頭が1から始まるデータと、1以外のデータがあり、
「先頭の数字が1なら、再度1が現れるまで1以外から始まる2行目以下と1から始まる1行目と合体させループ処理」をしたいです。

よくわからなくなってしまって、、、
お分かりになりますでしょうか?

Open str入出金 For Input As #1
Do Until EOF(1)
Line Input #1, txtData

If Left(txtData, 1) = "1" Then '1の場合
txtData1 = StrConv(txtData, vbFromUnicode)


ElseIf Left(txtData, 1) = "2" Then '2の場合


rs.AddNew 'レコードを追加(Nullばかりの1行が追加されます)
rs!インポート日時 = dateImport
rs!行番号 = i

rs!入出金照会結果日付 = StrConv(MidB(txtData1, 5, 6), vbUnicode)
rs!銀行コード = StrConv(MidB(txtData1, 23, 4), vbUnicode)
rs!銀行名 = StrConv(MidB(txtData1, 27, 15), vbUnicode)
rs!支店コード = StrConv(MidB(txtData1, 42, 3), vbUnicode)
rs!支店名 = StrConv(MidB(txtData1, 45, 15), vbUnicode)
rs!預金種目 = StrConv(MidB(txtData1, 63, 1), vbUnicode)
rs!口座番号 = StrConv(MidB(txtData1, 64, 10), vbUnicode)
rs!口座名 = StrConv(MidB(txtData1, 74, 40), vbUnicode)

rs!照会番号 = StrConv(MidB(txtData, 2, 8), vbUnicode)
rs!勘定日 = StrConv(MidB(txtData, 10, 6), vbUnicode)
rs!預入払出日 = StrConv(MidB(txtData, 16, 6), vbUnicode)
rs!入払区分 = StrConv(MidB(txtData, 22, 1), vbUnicode)
rs!取引区分 = StrConv(MidB(txtData, 23, 2), vbUnicode)
rs!取引金額 = StrConv(MidB(txtData, 25, 12), vbUnicode)
rs!うち他店券金額 = StrConv(MidB(txtData, 37, 12), vbUnicode)
rs!交換呈示日 = StrConv(MidB(txtData, 49, 6), vbUnicode)
rs!不渡返還日 = StrConv(MidB(txtData, 55, 6), vbUnicode)
rs!手形小切手区分 = StrConv(MidB(txtData, 61, 1), vbUnicode)
rs!手形小切手番号 = StrConv(MidB(txtData, 62, 7), vbUnicode)
rs!僚店番号 = StrConv(MidB(txtData, 69, 3), vbUnicode)
rs!振込依頼人コード = StrConv(MidB(txtData, 72, 10), vbUnicode)
rs!振込依頼人名 = StrConv(MidB(txtData, 82, 48), vbUnicode)
rs!仕向銀行名 = StrConv(MidB(txtData, 130, 15), vbUnicode)
rs!仕向支店名 = StrConv(MidB(txtData, 145, 15), vbUnicode)
rs!摘要 = StrConv(MidB(txtData, 160, 20), vbUnicode)
rs!取扱日付 = StrConv(MidB(txtData, 180, 4), vbUnicode)
rs!日付 = StrConv(MidB(txtData, 184, 4), vbUnicode)
rs!ダミー = StrConv(MidB(txtData, 192, 4), vbUnicode)
rs!ARS取引区分 = StrConv(MidB(txtData, 203, 1), vbUnicode)
rs!ARS金額区分 = StrConv(MidB(txtData, 204, 1), vbUnicode)


rs.Update '値をセット

End If
i = i + 1
Loop
Close #1



■[返信 1] さんこうさん(2024-07-01 14:46:19)の記事
> >先頭の数字が1なら、再度1が現れるまで2行目以下は1行目と合体させループ処理する。

> 「例」として書かれているものがなんなのか存じませんが、

> 「先頭の数字が1なら、再度1が現れるまで2行目以下は1行目と合体させループ処理する」ならこんな感じでしょうか。

> Sub a()
> r = 1
> Do While Cells(r, "A") <> ""
> If Left(Cells(r, "A"), 1) = "1" Then
> r0 = r
> Else
> If r0 <> 0 Then Cells(r0, "A") = Cells(r0, "A") & Cells(r, "A")
> End If
> r = r + 1
> Loop
> End Sub


[返信 4] Re : ループ処理
投稿者 : さんこう     投稿日時 : 2024/07/01(Mon) 16:15:17
>よくわからなくなってしまって、、、

どんな問題が発生しているのかわかりませんが、それっぽくできていると思います。

[返信 5] Re : ループ処理
投稿者 : 通りすがり10     投稿日時 : 2024/07/02(Tue) 15:21:21
ファイルの切り方から見て、1データ1行レコード形式で区切り記号のないCOBOLコードで扱ってたデータをRDBに入れたいという事ですかね。
どこで問題が起きてるのか説明していただかないと返信しようがないと思います。

ファイル形式と大雑把なファイルの構造。
したい処理の明確化。
どこで処理がおかしくなるかの報告など。
色々必要な情報をお願いします。
今はかなりいい感じのコードだと思いますがどこで問題が起きてるのでしょうか?

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-02 15:18:18 )
タイトルとURLをコピーしました