次の方法で共有

VBAでプログラムコードを大小いくつか作成しましたが,あまり自信がないのですが添削してもらえる窓口サイトを教えてください.

Anonymous
2025-02-16T10:05:39+00:00

Sub 新漢字検索_総合() 'Used ***********************************************

' MsgBox "新たに作り直す"

 Dim ssr As Long, ssc As Long, sk As Variant

 Dim Jobflag As Variant, Outofset As Long

 ssr = 3 '検索データの場所

 ssc = 3

 sk = Cells(ssr, ssc).Value

 Outofset = 100

 Jobflag = 0

 新\_漢字\_検索方法1\_2\_3両方 ssr, ssc, sk, Jobflag, Outofset
```End Sub

Sub 新\_漢字\_検索方法1\_2\_3両方(ssr, ssc, sk, Jobflag, Outofset)

Dim rng As Range, Srng As Range, P_Address As String ' 最初に見つかったセルのAddress

Dim C1 As Long, C2 As Long, Pr As Long, pc As Long

Dim Eflag As Long, cnt As Long, skf As Long, flag0 As Long, flag1 As Long '検索結果

Dim Job As Variant, Job1 As Variant, Book_n As String, shn As String, Rshn As String, 抽出先rng, path As String

Dim cpi As Long, TcT As Long, m_Category As Long, w_flag1 As Long, w_flag2 As Long, ofset As Long

Dim OutR As Long, OutC As Long, i As Long, JobX As Variant, Jobfx As Long, Jp As Variant

Dim Judge As Variant


m_Category = Cells(5, 2).Value

ofset = 3

Book_n = ActiveWorkbook.Name

shn = ActiveSheet.Name

Rshn = "検索結果Sh"

path = ActiveWorkbook.path ' Fullname & Book_n

cnt = 0

C1 = 2: C2 = m_Category * 4 + 1: cpi = 0 '範囲左端右端:フィールド行:パターン設定値

Erase Seach_Dim: Erase Seach_Dim漢字列: Erase min漢

OutR = 4: OutC = 4 '出力先の左上

Set 抽出先rng = Range(Cells(5, OutC), Cells(104, 9))

w_flag1 = 0: w_flag2 = 0 '検索された最初の1,2個用flag共に初期値=0,一度通過すると1です.


   Inisial\_work\_Common Job, Book\_n, shn, Rshn, rng, C1, C2, ssr, ssc, cpi, sk, skf, 抽出先rng, OutR, OutC

   If skf = 9 Then

Cells(ssr, ssc).Select

MsgBox "検索値が入力されていません."

Exit Sub


'検索対象があるかまたはいくつあるか調べる

   Workbooks(Book\_n).Worksheets(shn).Activate

   cnt = 0

   rng.Select

   Set rng = Range(Cells(StartRow + 1, C1), Cells(D\_max, C2))  '検索範囲

   Set Srng = rng.Find(what:=sk, LookIn:=xlValues, \_

            LookAt:=xlWhole, MatchCase:=False, MatchByte:=False)

 MsgBox sk & "は,見つかりません,登録されていません." & Chr(10) & \_

"検索文字に間違いがあれば,訂正して再度実行してください."

Workbooks(Book\_n).Worksheets(shn).Activate

Application.ScreenUpdating = True

Cells(ssr, ssc).Select

Exit Sub

End If


'最初の検索結果のアドレスを格納/   皆通る

Range(Srng.Address).Select '最初を選択

P_Address = Srng.Address '代入アドレスPに代入

cnt = 1 '1個目

If min漢(1, 1) > 0 And cnt = 1 And w_flag1 = 1 Then

Else

    Pr = ActiveCell.Row

    pc = ActiveCell.Column

    min漢(1, 1) = Pr

    min漢(1, 2) = pc

    min漢(1, 3) = Cells(Pr, pc).Value

    w\_flag1 = 1

End If

Do

'次の検索を実行

Set Srng = rng.FindNext(After:=Srng)

      '対象文字の操作のためたプロシ-ジャ呼び出し

     Srng.Select

     If Srng.Address = P\_Address Then    '1個も3以上の複数の場合終わり抜ける

            Exit Do

'                     Exit Do

     ElseIf cnt = 2 And w\_flag2 = 1 Then  ' 2個を抜ける

     End If

            Range(Srng.Address).Select

            cnt = cnt + 1

            If w\_flag2 = 1 And min漢(2, 1) > 0 And cnt > 2 Then

            Else '2個め取得

                Pr = ActiveCell.Row

                pc = ActiveCell.Column

                min漢(2, 1) = Pr

                min漢(2, 2) = pc

                min漢(2, 3) = Cells(Pr, pc).Value

                w\_flag2 = 1

            End If

Loop 'Until Srng.Address = P_Address


'Stop

   If cnt > 100 Then

MsgBox "検索文字; " & sk & " の登録/検索数が多く,100 以上あります. " & cnt & Chr(10) & _

"このシステムでは,配列数や書き出し範囲上限界です." & Chr(10) & _

"検索文字を変更して最初からやり直してください,一時中止します."

Workbooks(Book_n).Worksheets(shn).Activate

Cells(ssr, ssc).Select

Exit Sub


'      SearchM1 rng, C1, C2, ssr, ssc, sk, cnt, Eflag, Pr, pc

MsgBox "検索数は," & cnt & "個です.その場所のパターンを黄色で示します."

Workbooks(Book_n).Worksheets(shn).Activate

Application.ScreenUpdating = True

Cells(min漢(1, 1), min漢(1, 2)).Select

Selection.Interior.ColorIndex = 6


  JobX = InputBox("検索結果は," & sk & "これ1つです" & Chr(10) & \_

  " 1...ここに止まり修正する" & Chr(10) & \_

  " 2...確認しただけで次の別の検索を行います", "job set", 2)

  If JobX = "" Or JobX = 0 Then

      Cells(3, 3).Select

      Exit Sub

  ElseIf JobX = 1 Then

     Cells(min漢(1, 1), min漢(1, 2)).Select

     Selection.Interior.ColorIndex = 0

  Else

      Application.ScreenUpdating = True

      Cells(ssr, ssc).Select

      Exit Sub

  End If

ElseIf cnt = 2 Then


     Jp = InputBox("最初の検索位置か,2番目の位置のどちらかにとどまり検索は終わります." & Chr(10) & \_

    "1...最初の位置 " & Chr(10) & \_

    "2...2番目の位 " & Chr(10) & \_

    "3...検索を終わる", "JobSet", 2)

    If Jp = "" Or Jp = 0 Then

        Cells(3, 3).Select

    ElseIf Jp = 1 Then

       Cells(min漢(1, 1), min漢(1, 2)).Select

    ElseIf Jp = 2 Then

       Cells(min漢(2, 1), min漢(2, 2)).Select

    Else

       MsgBox "検索は終わります."

       Workbooks(Book\_n).Worksheets(shn).Activate

       Cells(ssr, ssc).Select

       GoTo Last\_work

Exit Sub

    End If

ElseIf 3 <= cnt Then

    MsgBox "最後まで検索は終わりました.検索文字; " &amp; sk &amp; " は," &amp; cnt &amp; " 個有りました." &amp; Chr(10) &amp; Chr(10) &amp; \_

    "検索数が多い場合は,続けて一覧表へ書き出し作業を行います,その結果では,確認したい場所の行番号に移動するボタンでジャンプできます." &amp; Chr(10) &amp; \_

            "作業は,そちらの指示に従って下さい."

    Job = 3 '漢字列検索専用書き出し方式/特定の範囲検索をします"

    列単位に検索する\_続ける\_カラーセット Book\_n, shn, Rshn, rng, Job, sk, m\_Category, ofset, C1, C2, ssr, ssc, Pr, pc, Eflag, OutR, OutC

Else

End If


Last\_work:

Application.ScreenUpdating = True

MsgBox Mesage5


'3  \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

'                                         Book\_n , shn, Rshn, rng, Job, sk, m\_Category, ofset, C1, C2, ssr, ssc, Pr, pc, Eflag, OutR, OutC

Sub 列単位に検索する\_続ける\_カラーセット(Book\_n, shn, Rshn, rng, Job, sk, m\_Category, ofset, C1, C2, ssr, ssc, Pr, pc, Eflag, OutR, OutC)

Dim 抽出先rng As Range, Sr1 As Long, Sc1 As Long, Ca As Long

Dim Srng As Range, P_Address As String, pp As Long, lr As Long

Dim Job1 As Variant, Judge As Variant, cpi As Long, w_flag As Long, i As Long

Dim cnt As Long

Workbooks(Book_n).Worksheets(shn).Activate

cnt = 0

For i = 1 To m_Category

pp = (i - 1) * 4 + ofset

lr = Cells(D_max, pp).End(xlUp).Row

Range(Cells(StartRow + 1, pp), Cells(lr, pp)).Select

Set rng = Range(Cells(StartRow, pp), Cells(lr, pp))

Set Srng = rng.Find(what:=sk, LookAt:=xlPart) '最初はFind検索

If Srng Is Nothing Then '無い場合の処理*********

       Eflag = 0

       GoTo スキップ

Else

    '最初の検索結果のアドレスを格納

Range(Srng.Address).Select  'Srng.Activate

P\_Address = Srng.Address    '代入アドレス

Pr = ActiveCell.Row

pc = ActiveCell.Column

Cells(Pr, pc).Select  '↑と同じこと

cnt = cnt + 1

GoSub 配列設定

End If


    Do  '次の検索を実行

        Set Srng = rng.FindNext(After:=Srng)  'RangeのFindNextの引数Afterに,戻り値Srngにセットする/その次から検索継続する..Activate

             If Srng.Address = P\_Address Then  '最初と同じ場合

                If cnt &gt; 0 Then   'カウントが1個以上である

                    cnt = cnt

                    Eflag = 1

                Else

                    Eflag = 9

                End If

                Exit Do

             Else

             Range(Srng.Address).Select  '次の地点

             cnt = cnt + 1   '積算増加

             GoSub 配列設定

          End If

    Loop

Next i


  If Job = 1 Then

MsgBox "検索結果は,一覧表に黄色いパターンで表示されています."


Sheets(Rshn).Select

Cells(OutR - 1, OutC + 3).Value = sk

GoSub 結果書き出し


Sheets(Rshn).Select

Cells(OutR - 1, OutC + 3).Value = sk

GoSub 結果書き出し


Sheets(Rshn).Select

Cells(OutR - 1, OutC).Select

Application.ScreenUpdating = True


Exit Sub

配列設定:    '列単位で検索する時

            Seach\_Dim(cnt, 1) = Srng.Address        '1アドレス

            Seach\_Dim(cnt, 2) = ActiveCell.Row      '2 Row

            Seach\_Dim(cnt, 3) = ActiveCell.Column   '3 column

            Seach\_Dim(cnt, 4) = Cells(StartRow, ActiveCell.Column)     '4カテゴリ

            Seach\_Dim(cnt, 5) = Srng                '5セル内容

            Cells(Seach\_Dim(cnt, 2), Seach\_Dim(cnt, 3)).Select

            Selection.Interior.ColorIndex = 6

結果書き出し:

Workbooks(Book_n).Worksheets(Rshn).Activate

For i = 1 To cnt

  Cells(OutR + i, OutC).Select

  Cells(OutR + i, OutC).Value = Seach\_Dim(i, 1)  'addoress

  Cells(OutR + i, OutC + 1).Select

  Cells(OutR + i, OutC + 1).Value = Seach\_Dim(i, 2)  'Pr

  Cells(OutR + i, OutC + 2).Select

  Cells(OutR + i, OutC + 2).Value = Seach\_Dim(i, 3)  'Pc

  Cells(OutR + i, OutC + 3).Select

  Cells(OutR + i, OutC + 3).Value = Seach\_Dim(i, 4)  'Catrgori

  Cells(OutR + i, OutC + 4).Select

  Cells(OutR + i, OutC + 4).Value = Seach\_Dim(i, 5) 'セル内容

Next


End Sub
開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

13 件の回答

並べ替え方法: 最も役に立つ
  1. simo-k 85,320 評価のポイント ボランティア モデレーター
    2025-02-16T10:56:04+00:00

    デバッグモードやブレークポイントなどを駆使して、

    中間状態の変数やオブジェクトの内容を確認すれば意図した内容かどうかは一目瞭然な筈です。

    思うではなく、具体的に確認しましょう。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2025-02-16T10:52:15+00:00

    確かに思い通りになればよいですが,Findがどのような動きをしているのかわからないのでまたアルゴリズムが分かっていないので書き方に間違いがあることもあります.特に検索数が1つの場合と複数の場合で動きが異なるように思います.確かに1周検索を行い最初の場所に戻れば終わりとは分かっています.

                                           以上

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2025-02-16T10:39:58+00:00

    英語では質問が不可能ですので結構です.

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. simo-k 85,320 評価のポイント ボランティア モデレーター
    2025-02-16T10:30:44+00:00

    > 添削してもらえる窓口サイト

    添削という表現が微妙ですが、基本的にあなたが意図した動作をしていればOKではないですか?

    そのプロセスにおいてマクロの記述方法は人様々です。(一つの書き方だけが正解とは限りません。)

    意図した挙動になっていない、エラーなどを克服出来ないなどの場合は、

    その詳細情報などを添えて海外コミュニティで聞いてみれば良いのでは無いでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. simo-k 85,320 評価のポイント ボランティア モデレーター
    2025-02-16T10:22:41+00:00

    VBA(マクロ)の公式サポート場所は、海外コミュニティとなっています。

    有識者が集まっている所の方が、適切なアドバイスを受けやすいでしょう。

    Stack Overflow(VBA)

      [VBA プログラミングに関する質問]

      Stack Overflow には、説明的なタイトル、完全で簡潔な問題ステートメント、問題を再現する
      ための十分な詳細の要求などのガイドラインがあることに注意してください。
      機能要求または過度に広範な質問は、トピック外と見なされます。
      新しいユーザーの場合は、Stack Overflow ヘルプ センター にアクセスして詳細を確認して下さい。

    ※ 閲覧者・回答者が多い公式サポートサイトをお勧めします。

      英語で質問を送信してください。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません