質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1807閲覧

マクロ:同じ列の重複したデータの値を変更したい

Jonny_dayo

総合スコア48

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/09/14 09:48

A列の2行目から
1
2
3
4
2
2
と値が入力されていた場合に、

1
2
3
4
2a
2b

のように重複しない値に変更したいのですが、方法が分からず助けて欲しいです????
重複したセルに色をつけるを参考にもしてみましたが、値そのものを変更するにはどうしたら良いか…

vba

1Const ID_COLUM As Integer = "1" 2 3Dim startRange As Range 4Dim endRow As Double 5Dim endRange As Range 6 7Set startRange = WorkSheets("シート1").Range("A2") 8endRow = startRange.End(xlDown).Row 9Set endRange = WorkSheets("シート1").Cells(endRow, ID_COLUM) 10 11Dim i As Long 12For i = startRange To endRange 13 14'A列をチェック 15'重複したセル(2つ目以降)にa, b, c...と値を追加して差別化したい 16 17Next i 18

現状のコードは上記のような感じです。
For文でチェックしようかなと試していますが他に良い方法があれば教えていただきたいです。

どうやれば思った通りの処理にできるか、
またはこのサイトが参考になるよなどあれば教えていただきたいです????

お手数ですが何卒よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんな感じでどうでしょうか。

vba

1Sub sample() 2 3 Const ID_COLUM As Long = 1 4 5 Dim ws As Worksheet 6 Set ws = Worksheets("シート1") 7 8 Dim dic 'As Scripting.Dictionary 9 Set dic = CreateObject("Scripting.Dictionary") 10 11 Dim startRow As Long, endRow As Long 12 startRow = 2 13 endRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 14 15 16 Dim i As Long, v As String 17 For i = startRow To endRow 18 v = ws.Cells(i, ID_COLUM).Value 19 If dic.Exists(v) Then 20 ws.Cells(i, ID_COLUM).Value = v & LCase(Split(ws.Cells(1, dic(v)).Address, "$")(1)) 21 End If 22 dic(v) = dic(v) + 1 23 Next i 24 25End Sub 26

投稿2021/09/14 11:12

jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jonny_dayo

2021/09/14 11:26

え、天才…? 思ってた通りの挙動になりすぎて驚きを隠せないです…! めちゃくちゃ感激!!嬉しいです!!! 本当にありがとうございます!!!!!!
guest

0

すみません。既に解決済みですが、

jinojiさんのスクリプトを実行すると、以下のようになります。
イメージ説明
左側が、スクリプト実行前
右側が、スクリプト実行後です。
このような結果を期待されていますか?

投稿2021/09/14 12:01

tatsu99

総合スコア5470

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jonny_dayo

2021/09/14 12:40

わお!!確かに!! 基本的にはA列には数字しか入らないので大丈夫かな〜と思ってます! 本番用のシートで確認もしてみましたが多分今のところは大丈夫そうで… すでにアルファベットが付与されている数字がA列にない限りはこの現象は起きないと思ってゆっくりお布団の準備をしていたのですが、このままだと何かまずいことになりますでしょうか…????? わざわざリスク提示してもらえるのばか嬉しいですありがとうございます????????
jinoji

2021/09/14 12:44

なるほど、そのケースだと確かにそうなりますね。 どうしたいかによりますが、たとえば v = Val(ws.Cells(i, ID_COLUM).Value) と変えるとか、何かしらの工夫がいるかもしれませんね。
tatsu99

2021/09/14 12:55 編集

>基本的にはA列には数字しか入らないので大丈夫かな〜と思ってます! そうであれば、問題ありません。A列が数字だけであるという前提が明記されていなかったので、 念のため、質問した次第です。
Jonny_dayo

2021/09/16 02:32

なるほどー!!! おふたりともありがとうございます???????? こちらも要件不足ですみませんでした、、 無事に完了できました!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問