Excelで頭に文字をマクロで加える

このQ&Aのポイント
  • Excelで頭に文字をマクロで加える方法について質問です。
  • 現在、次のVBAを使用してセルの値の前に文字を追加していますが、いくつかの問題があります。
  • セルがブランクの場合にも文字が追加されてしまったり、ダブリの文字がある場合には文字がダブリの数だけ追加されてしまいます。修正すればよい方法はありますか?
回答を見る
  • ベストアンサー

Excelで頭に文字をマクロで加える

<http://okwave.jp/qa/q439461.html> にて、次のVBAが紹介されていますが、(1)セルがブランクの場合にも文字が追加、(2)ダブリの文字がある場合には文字がダブリの数だけ追加されてしまいます。 Sub Macro1()  For i = 1 To 100 Cells.Replace What:=Cells(i, "A"), _ Replacement:="1-" & Cells(i, "A") Next i End Sub 添付画像のように、セルの値がが無い(Nul)の場合には文字を加えない、そしてセルの値がダブっている場合では各々のセルの値にひとつだけ文字を加えるようにするには、どのように修正すればよいのでしょうか。 なお、Excelは2007を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

Sub Macro2()    Dim i As Long    For i = 2 To 100     If Range("A" & i) <> "" Then            Range("A" & i).Value = "1-" & Range("A" & i).Value     End If    Next i End Sub 繰り返しに条件分岐を混ぜればよいと思います

yukisaka
質問者

お礼

CoalTarさん、有難うございます。希望通りでした!!!

その他の回答 (2)

  • NURU_osan
  • ベストアンサー率50% (297/593)
回答No.2

失礼、No.1で回答したものですがブランクのことを忘れていました。 回答を修正します。 Sub Macro1() '変数宣言 Dim Str0 As String Dim Str1 As String Dim I As Long Dim R0 As Long Dim R1 As Long '処理 For R0 = 1 To 100   Str0 = Cells(R0, 1).Value 'ブランク回避   If Str0 <> "" Then   '重複数をカウント     I=0     For R1 = 1 To R0       Str1=Cells(R1, 1).Value       If Len(Str0)>Len(Str1) Then       ElseIf Str0=Right(Str1, Len(Str0)) Then         I = I + 1       End If     Next R1     '記述     Cells(R0, 1).Value = I & "-" & Str0   End If Next R0 End Sub

yukisaka
質問者

お礼

NURU_osanさん、有難うございます。勉強がてら自分なりに手を加えて試行してみたいと思います。

yukisaka
質問者

補足

NURU_osanさま、 早速ありがとうございます。 ブランクの方は希望通りだったのですが、残念ながらダブリの方は希望通りではありませんでした。 下のように、ダブリはすべて 1-003 になるように修正できないでしょうか。 よろしくお願いします。 1-項目番号 1-001 1-002 1-003 2-003 1-005 1-006 ではなく、 1-項目番号 1-001 1-002 1-003 1-003 1-005 1-006 のようにならないでしょうか。

  • NURU_osan
  • ベストアンサー率50% (297/593)
回答No.1

Sub Macro1() '変数宣言 Dim Str0 As String Dim Str1 As String Dim I As Long Dim R0 As Long Dim R1 As Long '処理 For R0 = 1 To 100   Str0 = Cells(R0, 1).Value   '重複数をカウント   I=0   For R1 = 1 To R0     Str1=Cells(R1, 1).Value     If Len(Str0)>Len(Str1) Then     ElseIf Str0=Right(Str1, Len(Str0)) Then       I = I + 1     End If   Next R1   '記述   Cells(R0, 1).Value = I & "-" & Str0 Next R0 End Sub

関連するQ&A

  • Excelマクロ 置換について教えてください。

    A列の,10を,15に置換したいので下記マクロを記録しました。 ほかに,10を,16などにしたい場合もあるため、 入力画面を表示して初期値は,10から,15ですが、ほかを入力した場合は他の値で置換するマクロを教えてください。 Sub Macro1() Columns("A:A").Select Selection.Replace What:=",10", Replacement:=",15", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub

  • エクセルで指定した文字に自動で置換することは可能ですか??

    A1セルに「バナナ」と表示されると下のマクロの記録で作った”置換するマクロ”の「りんご」の部分を「バナナ」に変更し、さらにこの置換マクロを自動実行することはできますか?? Sub Macro1()' Cells.Select Selection.Replace What:="名前(1)", Replacement:="りんご", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("A1").Select End Sub このマクロの記録でなくてもいいんですが、あるセルに置換したい文字が表示された時点でシート内の置換が実行されるようにしたいんですけど・・・・・。 よろしくお願いします。

  • エクセル(2003) 「1900/1/0」を消したい

    セルA1に0を入力し 書式設定で日付→yyyy/m/dを選択しました。 しかし下記のマクロ実行しても 0が空白になりません。 Sub 日付置換() Cells.Replace what:="1900/1/0", Replacement:="", LookAt:=xlPart Cells.Replace what:="00/01/00", Replacement:="", LookAt:=xlPart Cells.Replace what:="0", Replacement:="", LookAt:=xlWhole End Sub なら最初から0なんか入力しなきゃいいじゃん。 と思われるかもしれませんが これはCSVファイルで出力したもので 最初から0の数値にも書式設定がかかってて「1900/1/0」となっています。 「1900/1/0」のデータをなくしたいのですが どんな方法がありますか? データ量が多いためマクロなどで一度に行ないたいです。 アドバイスよろしくお願いします。

  • エクセルマクロ 条件分岐 条件に合わない列は削除

    マクロ初心者です。 添付のようなデータが30000万行位ありますが、 1)セルAの値が16またはRFの場合はその行のデータをすべて残します 2)セルAの値が上記以外の場合はその行をすべて削除したいのですが 私なりに調べて次のようなマクロを記録しました。 Sub macro1() Dim i As Integer For i = 1 To 30000 If Cells(i, 1).Value = "16" Or Cells(i, 1).Value = "RF" Then Cells(i, 1) = Cells(i, 1) Else Rows(i).Delete End If Next i End Sub 1)の部分は何とか動いてくれているみたいですが 2)の条件に合わない行の削除の記録がぜんぜんだめみたいで途方に暮れています。 わかる方がいらっしゃいましたら是非ご教授願います。

  • エクセルのマクロについて

    下記は、A列3行の7文字目~10文字と B列5行~文字のある最後の行までの範囲の左から1文字目~4文字 に相違がある場合 MsgBox i & “行目” を出す。 というマクロなのですが、『B列5行~文字のある最後の行までの範囲』の中でも『空白のセルに関してはMsgBox不要』というふうに付加えたいのですがどのようにすればよいでしょうか。 Sub Macro1() Dim i As Long Dim sOrgText As String Dim ltotal As Long With ActiveSheet sOrgText = Mid(.Cells(3, 1), 7, 4) ltotal = .Cells(65536, 2).End(xlUp).Row For i = 5 To ltotal If Not Mid(.Cells(i, 2), 1, 4) = sOrgText Then MsgBox i & "行目" End If Next i End With End Sub

  • EXCELマクロ、ループかけるとマクロが固まる

    「フォルダ内の全てのExcelファイルに対してループを実行する」マクロを組むと、カーソルがぐるぐるして正常に起動していないように思えます。ループ無しであればさくさく動きます。ループ無しの場合は、ファイル1つ1つを自分で開けてマクロを起動。マクロは下記の通り。初心者です。 Sub NEM_Macroループ() ' ' フォント変更、記号変換、テキストボックス、全シート ' Dim myFile As String Dim myPath As String Dim myBook As Workbook Dim mySheet As Worksheet Dim myRange As Range Dim cell Application.ScreenUpdating = False 'フォントを変更するファイルが保存されているフォルダのパスを指定します。 myPath = "C:\Users\N000000\Desktop\NEM_macro" '指定したフォルダ内の全てのExcelファイルに対してループを実行します。 myFile = Dir(myPath & "\*.xlsx") Do While myFile <> "" '各ファイルを開きます。 Set myBook = Workbooks.Open(myPath & "\" & myFile) '全てのワークシートに対してループを実行します。 For Each mySheet In myBook.Sheets 'シート内の全てのセルに対してループを実行します。 Set myRange = mySheet.UsedRange For Each cell In myRange Cells.Select With Selection.Font .Name = "MS Pゴシック" .Name = "Arial" End With Selection.Replace What:="、", Replacement:="," Selection.Replace What:="※", Replacement:="*" Selection.Replace What:="①", Replacement:="(1)" Selection.Replace What:="②", Replacement:="(2)" Selection.Replace What:="③", Replacement:="(3)" Selection.Replace What:="④", Replacement:="(4)" Selection.Replace What:="⑤", Replacement:="(5)" Selection.Replace What:="⑥", Replacement:="(6)" Selection.Replace What:="⑦", Replacement:="(7)" Selection.Replace What:="⑧", Replacement:="(8)" Selection.Replace What:="⑨", Replacement:="(9)" Selection.Replace What:="⑩", Replacement:="(10)" '半角全角修正 Dim セル As Range Dim 変換文字 As String Dim 半角 As String Dim i As Long ActiveSheet.UsedRange.Select For Each セル In Selection 変換文字 = StrConv(セル.Text, vbWide) For i = 1 To Len(変換文字) 半角 = StrConv(Mid(変換文字, i, 1), vbNarrow) If Asc(半角) >= 32 And Asc(半角) <= 126 Then _ 変換文字 = WorksheetFunction.Replace(変換文字, i, 1, 半角) Next i セル = 変換文字 Next 'テキストボックスグループ化解除 Dim mySPg As Shape For Each mySPg In ActiveSheet.Shapes If mySPg.Type = msoGroup Then mySPg.Ungroup End If Next mySPg Dim mySP As Shape 'すべての図形テキストボックスをループ For Each mySP In ActiveSheet.Shapes 'テキストボックスの場合 If mySP.Type = msoTextBox Then 'フォント変更 mySP.TextFrame2.TextRange.Font.NameFarEast = "MS Pゴシック" mySP.TextFrame2.TextRange.Font.NameFarEast = "Arial" End If Next mySP Next Dim 年月 Dim ThisName, NewName Dim MojiCoA As Integer, MojiCoB As Integer 'Format,Year,Month関数を利用します 年月 = Year(Date) & "_" & Month(Date) '拡張子なしのファイル名を取得します MojiCoA = InStrRev(ActiveWorkbook.Name, ".") ThisName = Left(ActiveWorkbook.Name, MojiCoA - 1) 'ファイル名を変数へ設定します NewName = ActiveWorkbook.Path & "\" & ThisName & 年月 & ".xlsx" '作成したWorkbookを名前を付けて、移動先フォルダに保存します ActiveWorkbook.SaveAs Filename:=NewName '次のファイルに移動します。 myFile = Dir() Next Loop End Sub

  • エクセルの文字列置換マクロに関するご相談

    下方のマクロを実行することにより、 文字列リストの内容に基づいて、 別シート(作業)内の文字列を変換することができます。 文字列からコード値へ変換することを目的にマクロを埋め込んだのですが、 別シート(作業)の文字列をコード値に変換した際、3桁くぎりのコード値が並んだ場合に、 自動で数値として認識されてしまいます。 ※別シート(作業)のセルを文字列し設定しても発生します。 プログラムで回避手段があるようでしたらご教示いただければ幸いです。 例)文字列リストシート A B さる 10 ぞう 15 ごりら 101 きりん 102 わに 103 かば 104 マクロ実行前の作業シート A さる,ぞう ごりら ごりら,きりん,わに さる,ごりら マクロ実行後の作業シート A 10,15 101 101102103 10101 上記マクロ実行後のシートの3~4行目のように、 カンマが取れることを防ぎ、文字列として代入したい所存です。 <マクロ> Sub 文字列リストに基づき連続して置換する() i = 2 Do x1 = Sheets("文字列リスト").Cells(i, 1) x2 = Sheets("文字列リスト").Cells(i, 2) Sheets("作業").Cells.Replace _ What:=x1, Replacement:=x2, _ SearchOrder:=xlByColumns, MatchCase:=True i = i + 1 Loop Until Sheets("文字列リスト").Cells(i, 1) = "" End Sub ご教示いただければ幸いです。 よろしくお願いいたします。

  • エクセルマクロで特定の範囲内の検索

    A10からA100までのセルを上から順に調べて、セルにAという文字が入力されているときに、その隣にBという文字を入力するマクロを下記のように作りました。 「セルにAという文字が入力されているとき」という条件に加え、「検索しているセルから上の9個のセル(cells(i-9,1)からcells(i-1,1)まで)にAという文字が入力されていない」という条件を加えたいのです。 Sub 検索() Dim i As Integer For i = 10 To 100 If Cells(i, 1).Value = "A" Then Cells(i, 2).value = "B" End If Next i End Sub つまり If Cells(i, 1).Value = "A" Then  の部分を If Cells(i, 1).Value = "A" かつ Range(cells(i-9,1),cells(i-1,1))にAが入力されていない Then という形にしたいのですが、表現の仕方がわかりません。 ご教示よろしくお願いします。

  • Excel2003 VBA 「*」を含む文字列の置換方法は?

    セルに「あいうえお あい*うえお」という文字列がある場合 そのセルに対して Cells.Replace What:="あい*うえお", Replacement:="" の処理を実行するとすべて消えます この場合「あいうえお」だけを残すには どのようにすればいいのでしょうか?

  • Excelの置換で書式が変わる現象の回避策

    下記のようなマクロで複数の置換をしています。 Cells.Replace What:="★", Replacement:="☆", MatchCase:=True Cells.Replace What:="◆", Replacement:="◇", MatchCase:=True Cells.Replace What:="■", Replacement:="□", MatchCase:=True ・ ・ ・ セル内で改行して文字サイズや色を変えている箇所では置換後1行目の書式に変わってしまいます。 文字だけを置換をしたいのですがこれを回避する方法はあるのでしょうか教えてください。

専門家に質問してみよう