VBA初心者です。
昨日、複数のご教示をいただきましたが、要件の追加があり(汗)再度質問させていただきます。
(管理台帳が四半期単位の作成となるための追加要件です)
以下の要件をVBAで処理したいのです。
継続要件
・開始ボタン押下による処理開始
・区分ごとの管理番号を採番(4ケタ、0パディング)
追加要件
・区分ごとに管理番号の開始番号を変える(前期の最終番号を継承するため)
→新規ファイルごとにメンテする予定です。
・区分が未入力の場合は管理番号列に空白を返す
例)
管理番号:A列
案件名:B列
区分:C列
管理番号 案件名 区分
---------------------------------
a0100 案件1 a
b0051 案件2 b
c0001 案件3 c
a0101 案件4 a
案件5
b0052 案件6 b
a0102 案件7 a
c0002 案件8 c
関数では以下の様になると思います。
(前回記載した数式をアレンジしています)
=IF(C2="a",C2&RIGHT(COUNTIF(C$2:C2,C2)+10099,4),IF(C2="b",C2&RIGHT(COUNTIF(C$2:C2,C2)+10050,4),IF(C2="c",C2&RIGHT(COUNTIF(C$2:C2,C2)+10000,4),"")))
再度、御教示よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんばんは!
C列は「a,b,c」のいずれかが入るという前提です。
関数での場合はA2セルに
=IF(C2="","",C2&TEXT(50*(MATCH(C2,{"c","b","a"},0)-1)+COUNTIF(C$2:C2,C2)-IF(C2="a",1),"0000"))
という数式を入れフィルハンドルでずぃ~~~!っと下へコピーしてみてください。
今回はVBAでの方法をご希望のようですので、一例として・・・
Sub Sample1()
Dim i As Long, lastRow As Long, myVal As Variant
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 1 Then
Range(Cells(2, "A"), Cells(lastRow, "A")).ClearContents
End If
For i = 2 To lastRow
If Cells(i, "C") <> "" Then
myVal = WorksheetFunction.CountIf(Range(Cells(2, "C"), Cells(i, "C")), Cells(i, "C"))
Select Case Cells(i, "C")
Case "a"
Cells(i, "A") = Cells(i, "C") & Format(100 + myVal - 1, "0000")
Case "b"
Cells(i, "A") = Cells(i, "C") & Format(50 + myVal, "0000")
Case Else
Cells(i, "A") = Cells(i, "C") & Format(myVal, "0000")
End Select
End If
Next i
End Sub
といった感じでも大丈夫だとおもいますが、
わざわざVBAでやる必要はないように思えます。m(_ _)m
ご教示いただきありがとうございます。
VBAのコードもですが、関数に関しても勉強不足であると痛感しました。
orz
おっしゃる通り、VBAでやる必要がないことかもしれません。
大変助かります。
ありがとうございました。
No.1
- 回答日時:
前回回答したものです。
・区分が未入力の場合は管理番号列に空白を返す
については
Sub ボタン1_Click()
For i = 2 To Range("C" & Rows.Count).End(xlUp).Row
If Range("C" & i).Value="" Then
Range("A" & i).Value =""
Else
Range("A" & i).Value = Range("C" & i).Value & Right("000" & WorksheetFunction.CountIf(Range("C2:C" & i), Range("C" & i).Value), 4)
End If
Next
End Sub
こんな感じで大丈夫かと思います。
・区分ごとに管理番号の開始番号を変える(前期の最終番号を継承するため)
→新規ファイルごとにメンテする予定です。
これでは、データの管理の仕方が悪いです。
データは一枚のシートにひたすら縦方向に入力していく
必要に応じて、ある期間のデータを別シート、或いは 別ファイルに抽出するようにする。
こちらの方が良いです(普通です)
今回のコードでも、実行すると2行目から最終行まで再度、管理番号が入ることになりますが
本来であれば、C列(区分)を入力したら、その都度
その行に管理番号が自動で入る仕組みの方が良いと思います。
重ね重ね御教示いただきありがとうございます。
データ管理や採番の仕組みなど、ご指摘の通りだと今更ながらに思いました。
特にDBの観点すると、おっしゃる通りと赤面しています。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 【エクセル】COUNTIFの検索条件が可変する数字の場合の数式 1 2022/09/27 15:34
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について教えて...
-
Excelデータをコピペして、ペー...
-
Excel関数-文字列で自動作成さ...
-
スプレッドシート、Excelでの数...
-
Excelで50個のセルに同じ文字を...
-
Microsoft Officeの中古は信用...
-
スプレッドシートで使う数式を...
-
エクセルVBA、別ブックへ転記す...
-
エクセルで会社の従業員のデー...
-
エクセルで不等号記号(≠)が上に...
-
エクセルの表で1年間の曜日を...
-
A列とB列を参照してC列に連番を...
-
エクセルの空欄をつめて、次の...
-
エクセルでの特別な文字を上に...
-
エクセルでセルに標準で入力さ...
-
エクセル日付 文字列の関数がエ...
-
エクセル2013で月間勤務表から...
-
エクセルの日付を編集する
-
EXCELの質問です 119から足した...
-
【マクロ】アクティブセルにブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報