A B C D E
1 都道府県 市 枝番1 町 枝番2
2 東京都 中野区 1-1 あ町 1-1-1
3 い町 1-1-2
4 う町 1-1-3
5 新宿区 1-2 か町 1-2-2
6 渋谷区 1-3 さ町 1-3-1
7 台東区 1-4 し町 1-4-1
8 神奈川県 横浜市 2-1
9 横須賀市 2-2 た町 2-2-1
上のような表の枝番1と枝番2のところに、関数を使って連番を入れたいと思っています。
C3、C4、E8のようなところは空白のままにしておきたいです。
「COUNTA」「&」「IF」「MID」「FIND」「LEN」などを使うのではないかと思うのですが、複雑すぎて
私の能力を超えています。
どなたか、C2とE2に入れる数式を教えていただけないでしょうか。
どうかよろしくお願いいたします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
No.5です!
たびたびごめんなさい。
投稿した後で気になったのですが・・・
データの行数として一番多くなる列はD列になるのではないかと思いますので、
前回のコード内の
>For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
の部分(2行あります)を
>For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row
に訂正してみてください。
※ 2行目から最終データ行まで を表示したいので、「4」の部分が「D列」になります。
何度も失礼しました。m(_ _)m
No.5
- 回答日時:
こんばんは!
横からお邪魔します。
データが1万行を超えるということなので・・・
VBAでの一例です。
1行目はタイトル行でデータは2行目からあるとします。
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので、
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub test() 'この行から
Dim i, k As Long
Dim buf As String
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(i, 1) <> "" And Cells(i, 2) <> "" Then
k = 1
With Cells(i, 3)
.NumberFormatLocal = "@"
.Value = WorksheetFunction.CountA(Range(Cells(2, 1), Cells(i, 1))) & "-" & 1
End With
ElseIf Cells(i, 1) = "" And Cells(i, 2) <> "" Then
k = k + 1
With Cells(i, 3)
.NumberFormatLocal = "@"
.Value = WorksheetFunction.CountA(Range(Cells(2, 1), Cells(i, 1))) & "-" & k
End With
End If
Next i
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(i, 3) <> "" Then
k = 1
buf = Cells(i, 3)
End If
If Cells(i, 3) <> "" And Cells(i, 4) <> "" Then
With Cells(i, 5)
.NumberFormatLocal = "@"
.Value = Cells(i, 3) & "-" & k
End With
ElseIf Cells(i, 3) = "" And Cells(i, 4) <> "" Then
k = k + 1
With Cells(i, 5)
.NumberFormatLocal = "@"
.Value = buf & "-" & k
End With
End If
Next i
Application.ScreenUpdating = True
End Sub 'この行まで
※ 少数データでしか検証していませんので、ご希望通りの動きにならなかったら
ごめんなさいね。m(_ _)m
No.4
- 回答日時:
確認したいのですが、都道府県名や市名、及び町名の表示は、関数によって別のデータから引っ張って来たものではなく、キーボード入力等により、セルに直接入力されているものなのでしょうか?
又、東京都や中野区といった、都道府県名や市名は、同じ名前は必ず1回ずつしか現れず、
例えば、神奈川県が入力されている8行目よりも下の行に、再び東京都が現れたり、
「あ町」が入力されている行だけではなく、「い町」や「う町」が入力されている行にも、「中野区」と入力されていたり、
といった事は無いと考えて宜しいのでしょうか?
もし、上記のルールが厳密に守られている場合は、配列変数を使わずとも、普通の関数で完全自動化を図る事が出来ます。
まず、C列の中の適当なセルに次の関数を入力してから、そのセルをコピーして、C列のその他のセルに貼り付けて下さい。
=IF(INDEX($B:$B,ROW())="","",COUNTIF(INDEX($A:$A,ROW($A$1)+1):INDEX($A:$A,ROW()),"*?")&"-"&COUNTIF(INDEX($B:$B,MATCH("゛",$A$1:INDEX($A:$A,ROW()),-1)):INDEX($B:$B,ROW()),"*?"))
次に、E列の中の適当なセルに次の関数を入力してから、そのセルをコピーして、E列のその他のセルに貼り付けて下さい。
=IF(INDEX($D:$D,ROW())="","",COUNTIF(INDEX($A:$A,ROW($A$1)+1):INDEX($A:$A,ROW()),"*?")&"-"&COUNTIF(INDEX($B:$B,MATCH("゛",$A$1:INDEX($A:$A,ROW()),-1)):INDEX($B:$B,ROW()),"*?")&"-"&COUNTIF(INDEX($D:$D,MATCH("゛",$B$1:INDEX($B:$B,ROW()),-1)):INDEX($D:$D,ROW()),"*?"))
この回答への補足
ご回答ありがとうございます。
A、B、D列のデータは、全て独立したものです。また、若い列にあるデータが、それ以降の列に出てくることはありません。ただ、B列やD列の行の中に、読み方は違うが漢字にすると同じ漢字になってしまうというもの、または、漢字は同じだが読み方は違うものがあるのですが、その場合は教えていただいた数式は使えないのでしょうか?
配列変数を使わずに済むということは、それだけ処理速度が速いと言うことですね。
すでにこの表にはいくつもの関数や条件付書式が入っていて、データも1万件を超えているため、1行ずらすだけで1分以上処理に時間がかかるということもあります。ですから軽いに越したことはありません。
本当にありがとうございます。
エクセルがここまでできる人ってほんと尊敬します。
No.3
- 回答日時:
以下の数式でご希望のデータを表示できます。
ただし配列数式ですので、大量のデータを処理するときは、再計算に時間がかかるので、計算方法を手動にして、最後に表示させるときにF9キーで再計算させるなどの対応をしたほうが良いかもません。
C2セル
=IF(B2="","",COUNTA($A$2:A2)&"-"&COUNTA(INDEX(B:B,MAX(INDEX(($A$2:A2<>"")*ROW($A$2:A2),))):B2))
E2セル
=IF(D2="","",COUNTA($A$2:A2)&"-"&COUNTA(INDEX(B:B,MAX(INDEX(($A$2:A2<>"")*ROW($A$2:A2),))):B2))&IF(D2="","","-"&COUNTA(INDEX(D:D,MAX(INDEX(($B$2:B2<>"")*ROW($B$2:B2),))):D2))
ありがとうございます!!!
それにしてもすごすぎます。
まさかこれほど複雑になるとは思っていませんでした。
おかげで何十時間も節約することができます。
本当にありがとうございます。
No.2
- 回答日時:
まず相互の関連性の法則を明らかにしてください。
法則のないものを数式化することは不可能です。この回答への補足
分かりづらくてすみません。
私はあるもののデータベースを現在作成しています。
A列は数が決まっているので固定番号をつけています。
しかしC列については、今後どんどん新たなデータが入ってきます。
そのたびに枝番2を手作業で変更するのはかなりの負担ですし、上記のような枝番を振ることができれば、まとまったデータを今後追加するとき、ソートによって入れたい場所にそのデータを入れることができるのではないかと思いました。
ソートをかける際に、あ町~う町の順番を崩さず、その後に続くようにしたいのです。
D列は実際にはあいうえお順に並んでいるのではなく、更に右にある列によってその順番が決まっています。
これで答えになっていますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 神奈川県の市区町村の一覧。ただ 3 2023/05/01 18:01
- Excel(エクセル) EXCELでの複雑な複数条件について 4 2022/05/09 16:19
- Excel(エクセル) エクセルのマクロを教えてください。 2 2022/03/28 13:14
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
マイクロソフト 一時使用コード...
-
会社PCのメールが更新されない
-
英数字のみ全角から半角に変換
-
【Microsoft Forms】回答を削除...
-
VLOOKUP関数について
-
Microsoft Formsの「個人情報や...
-
【スプレッドシート】指定の日...
-
outlookのメールが固まってしま...
-
vb.net オブジェクト指向につい...
-
Outlook で宛先が複数の場合の人数
-
【スプレッドシート】白色のセ...
-
1つのPCに「Excel 2010」「Exc...
-
エクセルでXLOOKUP関数...
-
Microsoft Formsで「応答」から...
-
Office 2021 Professional Plus...
-
エクセルのシフト表を簡単にGoo...
-
Microsoft Edgeの「ニュースと...
-
Microsoft Officeに似たキング...
-
Excel VBA 日程表からスケジュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
マイクロソフト 一時使用コード...
-
英数字のみ全角から半角に変換
-
Office2021を別のPCにインスト...
-
Microsoft Formsの「個人情報や...
-
officeビジネス型のワードやエ...
-
会社PCのメールが更新されない
-
【スプレッドシート】指定の日...
-
Microsoft Officeを2台目のPCに...
-
何このステータスバー
-
2つのシートの一致する行のセ...
-
会社のTeamsのことで相談です。...
-
エクセルにリンクされるのをし...
-
Windows 11で、IME言語バー(IM...
-
office2010とoffice365の共存で...
-
Microsoftのパソコンです。 エ...
-
エクセルでXLOOKUP関数...
-
Excel関数について質問ですm(__)m
-
VBA
-
自分の専門分野の仕事。初見で...
おすすめ情報