次の方法で共有

Excel のマクロを改良したい

Anonymous
2024-03-13T08:44:17+00:00

現在仕事で使用しているエクセルのマクロにおいて、問題が生じたため質問致します。

当方はマクロ等の知識が皆無なため、理解力が低いですが、お助けいただきますと幸いです。

エクセルで自動採番のマクロを使用しており、既に振り分けられている番号を参照して採番してるマクロだと思います。

例:

1 001

002

003

2 001

002

3 001

4

 ・

 ・

 ・

マクロを起動したら上記のように番号が振り分けられていきます。

こちらの2列目の部分の11番目以降を1列目の親番の次の番号にする場合どのように改良すればよいでしょうか

例:

1 001

002

 ・

 ・

 ・

1 011  →  2 001

以下プログラムコードを記載致します。

Sub proc_A()

Dim strDairiten As String

Dim i As Integer

Dim intCount, intCount2 As Integer

intCount = 1

intCount2 = 1

strDairiten = Range("C2").Value

Range("A2").Value = intCount

Range("B2").Value = intCount & Format(intCount2, "00")

For i = 2 To 289

If strDairiten <> Range("C" & i).Value Then 

    intCount = intCount + 1 

    intCount2 = 1 

    Range("A" & i).Value = intCount 

    strDairiten = Range("C" & i).Value 

End If 

Range("B" & i).Value = intCount & Format(intCount2, "00") 

intCount2 = intCount2 + 1 

If intCount2 = 10 Then MsgBox "Count10:" & i & "行目" 
``` Next 

End Sub

説明下手で申し訳ございませんが、ご回答を頂けますと幸いです。
開発者テクノロジ | Visual Basic for Applications

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

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

質問作成者が受け入れた回答

ひまじん 17,185 評価のポイント
2024-03-15T15:14:11+00:00

こんにちは。横合いから失礼します。

他の方のアドバイスに返信が無いようですが、ご自身で何らかの解決策を見つけられたのでしょうか?。

既に他の方が書かれているように、質問文と提示されている VBAコードには多数の不明点や疑問点があります。

気になりましたので、ご希望の動作をある程度推測で補った上で、提示されているコードを以下のコード1のように書き換えてみました。

・コード1

Sub proc_A_1()

Dim strDairiten As String

Dim i As Integer, intCount As Integer, intCount2 As Integer

intCount = 1

intCount2 = 1

Application.ScreenUpdating = False

Range("A:B").ClearContents

strDairiten = Range("C2").Value

Range("A2").Value = intCount

For i = 2 To 289

  If strDairiten <> Range("C" & i).Value Or intCount2 = 11 Then

    intCount = intCount + 1

    intCount2 = 1

    Range("A" & i).Value = intCount

    strDairiten = Range("C" & i).Value

  End If

  Range("B" & i).Value = intCount & Format(intCount2, "00")

  intCount2 = intCount2 + 1

Next

Application.ScreenUpdating = True

End Sub

このコード1を実行した結果は、下記の図1のような表示になります。

・図1

※ C列には適当な「店名」を入れています。

※ご希望の表示になっていると思われるセル範囲の背景を黄色で色付けしています。

※ B列の連番の振り方は質問文とは異なっていますが、元のコードの通りにするとこうなります。

ご希望の表示と違っている部分がありましたら、どのセル(またはセル範囲)の表示が違っているのか出来るだけ詳しく教えてください。

また、これまで表示されていた「 Count10:12行目 」といった表示は削除していますので、これが必要な場合も教えてください。

ご希望の表示状態を教えていただく際には、提示されているコードを実行させている「シート名」も併せてお知らせください。

提示されているコードには「シート名」が指定されていないので、上記のコード1でも「シート名」を指定していません。

シートが複数ある場合には、「シート名」を指定しないと誤動作の原因になる場合があります。

尚、図1のような表示で良い場合も、必ずテスト環境(これまで使っていたファイルをコピーして使用)で十分にテストした上で、本来のファイルでお試しになってみてください。( VBAコードの実行結果は、簡単に元に戻すことが出来ないため。)

Windows11 と Excel2021 の組み合わせで動作確認しています。

ご参考になれば幸いです。

※「返信」がある場合は、必ずこのコミュニティにサインインした上で行ってください。

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

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2024-03-15T16:05:02+00:00

    わざわざここまで考えてくださって大変申し訳ないですが、翌日に自分でコードを解読して、if文にOrをつけ複数条件にすることによって自力で解決いたしました・・・。

    マクロを作ったものが既に退職済みで社内にマクロのコードをわかるものがいなかったため、こちらのコミュニティに投稿しました。

    他の方も回答してくださり、ありがとうございました。

    何もわからない状態で投げやりな質問をしてしまったこと、お詫びいたします。

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

    0 件のコメント コメントはありません
  2. simo-k 85,320 評価のポイント ボランティア モデレーター
    2024-03-13T09:30:44+00:00

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

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

    Stack Overflow(VBA)

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

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

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

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

      所謂、くれくれ君には対応してくれないと思います。

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

    0 件のコメント コメントはありません
  3. Anonymous
    2024-03-13T09:26:53+00:00

    > こちらの2列目の部分の11番目以降を1列目の親番の次の番号にする

    「次の番号にする」具体的な条件と根拠が不明瞭ですので、
    現時点では回答のしようがありません。

    > strDairiten = Range("C2").Value> If strDairiten <> Range("C" & i).Value Then > strDairiten = Range("C" & i).Value

    掲載されたソースコードから読み解けるのは、それぞれの番号の
    リセットとインクリメントを制御するために C 列( 3 列目)の
    各行のセルの値を比較する処理を実行している、ということだけです。

    しかし、挙げられた 2 つの実行例はいずれも C 列の値が不明です。
    また、そのマクロを実行すれば B2 セルの値は必ず 101 となるはずであり、
    例示されている値( 001 )とは合致していません。

    1 つめの実行例については C 列の各行のセルにどのような値が
    格納されているかをある程度推定することが出来ますが、
    2 つめの実行例(今回ご質問されている処理)に関しては
    何を根拠として「11番目以降」とされているのかが分かりません。

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

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