プロが教える店舗&オフィスのセキュリティ対策術

質問させて頂きます。
日々の仕事の作業の中でExcelであるB列に前もって名前が入っています。
現状手打ちでB列の名前を見ながら1-1 1-2 名前が変わったら2-1 2-2 というように番号をふっています。時間短縮で何かいい方法はないでしょうか?(マクロなど)
ご回答お願い致します。
例を下に入れております。

A列   B列
1-1 山田太郎
1-2 山田太郎
2-1 佐藤和也
2-2 佐藤和也
3-1 吉田五郎
3-2 吉田五郎
3-3 吉田五郎
4-1 伊藤忠文
5-1 田口達也
6-1 東京世田谷区分譲
6-2 東京世田谷区分譲
6-3 東京世田谷区分譲

宜しくお願い致します。

A 回答 (7件)

No.1です。



>時間短縮で何かいい方法はないでしょうか?(マクロなど)・・・
というコトですので、VBAでもやってみました。もちろん作業列は不要です。
シートモジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, c As Range
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(Cells(2, "A"), Cells(lastRow, "A")).ClearContents
End If
Range("C:C").Insert
Range("B:B").AdvancedFilter Action:=xlFilterCopy, copytorange:=Range("C1"), unique:=True
For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
Set c = Range("C:C").Find(what:=Cells(i, "B"), LookIn:=xlValues, lookat:=xlWhole)
With Cells(i, "A")
.NumberFormatLocal = "@"
.Value = c.Row - 1 & "-" & WorksheetFunction.CountIf(Range(Cells(2, "B"), Cells(i, "B")), Cells(i, "B"))
End With
Next i
Range("C:C").Delete
Application.ScreenUpdating = True
End Sub


※ データがバラバラでも出現順に「1-○」のような結果になります。
こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

tom4 さん
この度は本当にありがとうございます。
作業場このマクロが一番やりやすいのでベストアンサーにさせて頂きました。ものすごく作業短縮になります。
ほんと感謝してます。
ありがとうございました!!

お礼日時:2017/02/21 08:57

[No.6]ですが、


セル E2 の式 =IF(D2=D1,E1+1,1) は、セル D2 の式との形式統一のため、=(D1=D2)*E1+1 に修正しておきます。結果は同じだけど…
    • good
    • 0
この回答へのお礼

mike_gさん
ご回答ありがとうございます。
とても分かりやすく感謝しております。
こういったやりかたもあるんですね。
参考にさせて頂きます。
この度はありがとうございました。

お礼日時:2017/02/21 09:03

添付図参照


1.セル D1、E1 に数値 1 を入力
2.セル D2、E2 にそれぞれ式 =D1+(B1<>B2)、=IF(D2=D1,E1+1,1) を入力
範囲 D2:E2 を下方にズズーッとオートフィル
3.式 =D1&"-"&E1 を入力したセル A1 を下方にズズーッとオートフィル
「Excel B列の名前を見てA列に番号を」の回答画像6
    • good
    • 0

No.1・4です。



何度もごめんなさい。
書き忘れましたが、No.4のコードは
1行目が項目行でデータは2行目以降にある!という前提のコードです。
1行目からデータがある場合は当然コードが変わってきます。
手っ取り早いのは1行目に行を挿入し、項目行にしておき
ダミーで良いのでB1セルに何らかの項目名を入れておいてください。
そしてマクロ実行後1行目を削除してください。

どうも失礼しました。m(_ _)m
    • good
    • 0

書き忘れ


1行目にデータがある場合その上のセルを参照できないので、C,D列には直接1と入れてください。
(1行目なら1-1で確定の為)
    • good
    • 0
この回答へのお礼

yuji3690さん
この度はご回答ありがとうございます。
ご丁寧に感謝いたします。
C2=C1+IF(B2=B1,0,1)
D2=D1+IF(B2=B1,1,0)
A2=C2&"-"&D2
使えますね。参考にさせて頂きます。

ありがとうございました。

お礼日時:2017/02/21 08:54

データが2行目から開始している場合(A2=1-1,B2=山田太郎)


C2=C1+IF(B2=B1,0,1)
D2=D1+IF(B2=B1,1,0)
A2=C2&"-"&D2
としてACDのそれぞれの列を必要な行数コピー

C列:B列がその上のセルと一致すれば上のセルのまま、一致しなければそれに1加える。
D列:B列がその上のセルと一致すれば上のセルに1加える、一致しなければそのまま。
A列:C列の値とD列の値の間に-を入れてつなげる。
となっています。
    • good
    • 0

こんばんは!



B列データはバラバラではなく、まとまって存在するという前提です。
一案です。
↓の画像のように作業用の列を設けてみてはどうでしょうか?
C2セルに
=IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(C$1:C1)+1,C1))
という数式を入れフィルハンドルでずぃ~~~!っとこれ以上データはない!というくらいまで下へコピーしておきます。

A2セルに
=IF(B2="","",C2&"-"&COUNTIF(B$2:B2,B2))
という数式を入れフィルハンドルで下へコピーすると
画像のような感じになります。

※ 作業列が目障りであれば遠く離れた列にするか
非表示にしてください。m(_ _)m
「Excel B列の名前を見てA列に番号を」の回答画像1
    • good
    • 0
この回答へのお礼

Tom04さん ご回答ありがとうございます‼
ご丁寧にありがとうございます。作業列を作る方法は思いつきませんでした。こちらの方法も使えますね。ありがとうございました。

お礼日時:2017/02/21 08:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!