• ベストアンサー

excel2003 マクロ 複数セルに文字を追記

オートフィルタ後、E列の文字が入力されているセルにのみ 頭に「花」という文字をいれたい。 ということをしたいです。 もともと入っている文字に追記をしたいのですが どうすればよいでしょうか? オートフィルタした値は、すべて同じではないです。 アドバイスお願いします。 Sub オートフィルタ後花をつける() moji = "花" With Worksheets("Sheet1")    .Range("E3",Range("E65536").End(xlUp)).SpecialCells(xlCellTypeVisible).Select Selection.Value = moji & ActiveCell.Value←これではだめですよね・・・ End With End Sub

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

オートフィルタで絞り込み表示されているE列にだけ「花」を付けるなら以下も試してみてください Sub Macro2() Dim r As Range  On Error GoTo end0  For Each r In Range("E3:E65536").SpecialCells(xlCellTypeConstants, 3)   If r.EntireRow.Hidden = False Then    r.Value = "花" & r.Value   End If  Next r end0: End Sub

mimomosan
質問者

お礼

ありがとうございます! オートフィルタの仕様にほんっとにイライラして 試行錯誤の上、質問で上げさせて頂いたのをやっとこさ作りました。 自分で作っておいてなんですが、絶対いつか、不具合でそうだな・・・ の不安がぬぐえませんでした。 zap35さんの記述なら あらっ、いいですね~100%です!

mimomosan
質問者

補足

すみません。 お分かりになったらご回答ください。。。 上で、すでに「花」が付いているセルには 「花」をつけない という風にするには、どうすればよいでしょうか? If の中にandで複数条件 にしても、どのように書けばよいのかわからなくて・・ (ワイルドカードを使うのでしょうか・・・) 初心者で申し訳ないのですが、よろしくお願いいたします。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 オートフィルタを使うなら、このようにします。 ただし、オートフィルタの場合は、1行目は除外します。 >Selection.Value = moji & ActiveCell.Value←これではだめですよね・・・ 何か方法はあるような気がしますが、思いつきません。 '------------------------------------------- Sub Test1()   Dim i As Long   Const strMOJI As String = "花"   With ActiveSheet     .AutoFilterMode = False     With Range("A1").CurrentRegion       .AutoFilter Field:=5, Criteria1:="<>"     End With     Application.ScreenUpdating = False     'AutoFilter.Range で範囲を取得     With .AutoFilter.Range.Columns(5) 'E列       For i = 2 To .Rows.Count         If .Cells(i, 1).EntireRow.Hidden = False Then           .Cells(i, 1).Value = strMOJI & .Cells(i, 1).Value         End If       Next i     End With     '.AutoFilterMode = False  'オートフィルタを解除     Application.ScreenUpdating = True   End With End Sub

mimomosan
質問者

お礼

ご回答ありがとうございます。 フィルタをどう適用するかわからないのですが・・・ 読み解いてみます。

関連するQ&A

  • 可視セルを対象としたcountifができるでしょうか?

    オートフィルターで表示してある所だけを対象としてcountifで対象 値の数を出したいのでのですが できますでしょうか? Sub countif() Range("C1") = Application.WorksheetFunction.countif(Range("A:A").SpecialCells(xlCellTypeVisible), Range("B1")) End Sub イメージはこんな感じなのですがよろしくお願いします。

  • excelで複数条件で抽出する

    excel VBAで質問です。(初心者レベルです) A列からZ列までデータがあり、オートフィルタでE列で条件に当てはまるものと、E列では条件外だが、Y列では条件に当てはまるものを別シートに抽出したいと思っています。 Sub Macro1()   With Worksheets("Sheet1")     .Range("A1").AutoFilter _       Field:=5, Criteria1:="*条件*"     .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _       Worksheets("Sheet2").Range("A1")   End With End Sub Fieldを変えて、E列、Y列それぞれはできるのですが、データが重複してしまいます。 重複分を削除するため、セル入力で連番を降って、重複するものを削除しようとしましたがうまくいかず。 なにかいい方法はないでしょうか。

  • セルの中の改行された文字をひとつづつ取得したい

    図のように A1には「あ」「い」「う」が改行されて入っています。 Sub test() Dim moji(3) As String moji(1) = Range("a1").Value moji(2) = Range("a1").Value moji(3) = Range("a1").Value End Sub というコードを書いた時、 moji(1) ="あ" moji(2) ="い" moji(3) = "う" としたいのですが すべて"あいう"になってしまいます。 実現させるにはどうすればいいでしょう? アドバイスよろしくお願いします。

  • 実行時エラー1004空白セルを上に詰める

    よろしくお願いします いろいろ試しましたが解決できませんでした。 Private Sub CommandButton1_Click() With Worksheets("Sheet1") For r = 2 To .Cells(Rows.Count, "C").End(xlUp).Row If .Cells(r, "C").Value = 提出先.Value Then Me.提出先.Value = "" .Cells(r, "C").Value = "" Else End If Next r .Range("J3").Value = "" ’下記の構文でエラーが出ます ’実行時エラー1004 ’アプリケーション定義またはオブジェクト定義のエラーです .Range(Range("C2"), Cells.SpecialCells(xlCellTypeLastCell)).SpecialCells (xlCellTypeBlanks).Delete Shift:=xlUp End With End Sub

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

    Excelのマクロについて教えてください。 下記のマクロがあります。 With Range("A" & Rows.Count).End(xlUp) .EntireRow.Copy .Offset(1) .Offset(1).EntireRow.SpecialCells(xlCellTypeConstants).ClearContents .Offset(1).Value = .Value + 1 End With 実際にデータが入っているのはA列~E列までで .EntireRow(行全体)ではなく A?:E? と範囲を指定して上記を実行させたいのですが どのように変更するといいでしょうか。 よろしくお願いします。

  • VBAで列が可変のオートフィルの実装

    元となるSheet1のR列を「Sheet1~3」以外のシートの名前で オートフィルターさせてその内容をコピーし、数式を代入させたあと、連続データをEの列の最終セルまで 連続させてコピーするという下記のVBAを実装しました・・・が 連続データさせるEの列が1つしかなかった場合、連続データできないのでエラーが起きてしまします ですのでそれは無視してよいと単純に「On Error Resume Next」で処理しちゃってます でもこれでは、あまり良くない処理のような気がするのですが・・・ 連続データ出来ない場合は、1つのセルに数式を代入するだけでおしまい というプログラム処理はどのようにやればいいのでしょうか? ' オートフィルター For Each sh In Worksheets If sh.Name <> "Sheet1" And sh.Name <> "Sheet2" And sh.Name <> "Sheet3" Then Dim Filtarget As Range Dim Maction As Range 'コピーの開始する場所 Set Filtarget = Sheets(sh.Name).Range("A4") Set Maction = Sheets(sh.Name).Range("W4") Set Fills = Sheets(sh.Name).Range("X4") With Sheets("Sheet1").Range("R3") .AutoFilter Field:=18, Criteria1:=sh.Name .CurrentRegion.Copy With Worksheets.Add .Paste .Range("1:3").Delete .UsedRange.Copy Filtarget .Range("X1").Formula = "=E1/W1" .Range("M1:M" & Cells(Rows.Count, 13).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Maction .Range("X1").AutoFill Destination:=Range("X1:X" & Cells(Rows.Count, 5).End(xlUp).Row).SpecialCells(xlCellTypeVisible) On Error Resume Next .Range("X1:X" & Cells(Rows.Count, 5).End(xlUp).Row).SpecialCells(xlCellTypeVisible).NumberFormatLocal = "\#,##0;\-#,##0" .Range("X1:X" & Cells(Rows.Count, 5).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Fills Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With .AutoFilter Field:=18 End With End If Next 以上、よろしくお願い致します。

  • Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問

    Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問です。 セル ("A1:B7")に表があります。 a b 1 1 1 1 2 2 2 2 3 3 3 3 下記のVBAにて、temp2の値が、1となります。これが分かりません。 当方、欲しいのは、オートフィルタ後の見えている行の数です。 temp1=6は、オートフィルタで、選択されたセルs+ヘッダの計6こということで理解しています。 temp3=2は、列の数として、合っています。 Sub Macro1() Dim aa As Range Set aa = Range("A1:B7") aa.AutoFilter Field:=2, Criteria1:="2" temp1 = aa.SpecialCells(xlCellTypeVisible).Cells.Count 'temp1=6 temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1 temp3 = aa.SpecialCells(xlCellTypeVisible).Columns.Count 'temp3=2 End Sub 考え方として、間違ってはいないと思うのですが、行の数を求めるには、どのようにすれば良いでしょうか?

  • マクロの質問です。下記の式があるのですが、コピーしたい、セルには、文字

    マクロの質問です。下記の式があるのですが、コピーしたい、セルには、文字や計算式、又は他のセルから参照させてる物もあるので、張り付けたものに、エラーが数多く表示されるのですが、 コピー元の表示されてる文字を 張り付けることは、できるのでしょうか、 よろしくお願いします。 Sub 給与支払一覧() Application.ScreenUpdating = False Dim Sh As Worksheet For Each Sh In Worksheets If Sh.Name <> "給与支払一覧" And Sh.Name Like "Sheet*" Then With Worksheets("給与支払一覧") If Sh.Range("I14").Value > 0 Then With .Cells(.Rows.Count, 1).End(xlUp).Offset(1) Sh.Range("O2:X14").Copy .Cells(1) .Resize(6, 10).Value = Sh.Range("O2:X14").Value End With End If End With End If Next Sh Set Sh = Nothing End Sub

  • Excel2007で困ってます1

    全くわからなくてお手上げ状態です。誰か助けて下さい。 Sub test1() Range("O4:O1012").Value = Range("O3:O1011").Value End Sub [("O3:O1011")には関数も入ってるので値だけを("O4:O1012")に入れて、1行ずらした形にします] Sub test2() Range("O3").Value = Selection ActiveCell.Offset(1).ActivateEnd Sub [test1で空いたセルO3に、選択されたE3の値を入れまして、E4、E5、E6、…と移動してはO3に入れていきます。] Sub test3() Range("X5").Value = Selection ActiveCell.Offset(1).ActivateEnd Sub [test2でE3から始まる値を1つずつO3に入れると、それに伴って、セルC3の値をX5に1つずつ入れてはC4、C5、C6、…と移動してX5に入れていきます。] ……Excel2007で困ってます2に続きます……

  • マクロ 特定のセル値を「含む」にしたいです。

    f21の値をf21の値を「含む」にしたいのですが どのようにしたらよいでしょうか。 宜しくお願いいたします。 Sub オートフィルターによる抽出() Dim myName As String myName = Range("f21").Value If myName = "" Then MsgBox "担任を入力してください。" Else Range("a22").AutoFilter Field:=6, Criteria1:=myName End If End Sub

専門家に質問してみよう