• ベストアンサー

エクセル VBA Replace について

XP microsoft visual basic 6.0 です はじめに A1 に =SUM(A2:A5) と記入してます A2 から A5 には何も記入されていないので A1 の値は 0 です そこで Sub a() Dim e As Range For Each e In ActiveSheet.UsedRange e.Value = Replace(e.Value, "あ", "") Next End Sub を実行すると A1 の =SUM(A2:A5) が 0 と計算結果のみの数字に置き換えられてしまうのですが、何故なのでしょうか 置換後も 関数式を残しておきたいのですが何か良い方法はありませんか よろしくお願いします

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

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

式が入力されているセルでは置換処理をスキップしてはどうでしょうか。つまり、 >e.Value = Replace(e.Value, "あ", "") これをたとえば If Left(e.Formula, 1) <> "=" Then e.Value = Replace(e.Value, "あ", "") End If としてみては。

r576135768
質問者

お礼

このような解決策があったのですね 無事完成させることができました ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

> A1 の =SUM(A2:A5) が 0 と計算結果のみの数字に置き換えられてしまうのですが、何故なのでしょうか e.Value = Replace(e.Value, "あ", "") この式では Range としての e に .Value (値)を設定しています。 なので計算式の結果の値である 0 に置換された結果です。

r576135768
質問者

お礼

単純に "あ" を "" へと置換する意味でしか考えていませんでした これからまた勉強に励みたいと思います ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    初心者です。 下記モジュールで”あいうえお”を消しているのですが 凄く動きが遅いです。 もう少し高速に処理できる方法があれば教えてください。 (C2:C200)のセルには必ず各文の末尾に”あいうえお”が入力されている状態です。 Sub 文削除() '余計な分削除する Dim rg As Range For Each rg In Range("C2:C200") rg.Value = Replace(rg.Value, "あいうえお", "") Next End Sub

  • エクセルVBAでTransposeの不思議

    MS Officeのエクセル2000です。 下記Sub test01はRange("A1:I1")に文字列を入力し、一旦配列に取り込んでからワークシートに貼り付けるものです。 試験用のコードですので意味はありません。 このコードで255文字まではまったく問題はありません。 ところが、256文字以上の場合、横に貼り付けは問題ないのですが、 Transposeで縦に変換すると型が一致しません。(Error 13)となります。 どうしてでしょうか? 試行錯誤の結果、Sub test02のように一旦横に貼ったデータをコピーしてTransposeして貼り付けるのは大丈夫のようですので不思議でしょがありません。 またこの方法は列数256より要素が多い配列には使えないので解決策にはなりません。 ご教示くださいませ。 Sub test01() Dim myAr As Variant Dim i As Integer, n As Integer n = 256 '文字数 With ActiveSheet .UsedRange.ClearContents For i = 1 To 9 .Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n) Next myAr = .Range("A1:I1").Value .Range("A3").Resize(, UBound(myAr, 2)).Value = myAr .Range("A5").Resize(UBound(myAr, 2)).Value = Application.Transpose(myAr) '256文字の場合エラー End With End Sub Sub test02() Dim myAr As Variant Dim i As Integer, n As Integer n = 256 '文字数 With ActiveSheet .UsedRange.ClearContents For i = 1 To 9 .Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n) Next myAr = .Range("A1:I1").Value .Range("A3").Resize(, UBound(myAr, 2)).Value = myAr .Range("A3").Resize(, UBound(myAr, 2)).Copy .Range("A5").PasteSpecial Paste:=xlValues, Transpose:=True '256文字の場合もOK Application.CutCopyMode = False End With End Sub

  • Excel VBA のFor Each ・・・ Next について

    配列に数字(特段数字でなくても)入れたいのですが、以下のように書きました。 Sub test() Dim x As Variant Dim m(1 To 10) As Integer For Each x In m x.Value = 100 Next Stop End Sub Stopでとめてmを確認するとすべて0です。どうしてなのでしょうか。 配列ではなく Sub test() Dim x As Variant For Each x In range("a1:a10") x.Value = 100 Next End Sub とするとA1:A10には100が入ります。 この差がいまいちわからなくて、 もちろんFor ・・・ Nextで簡単に入れられるのは承知しています。 補足ですが また最初はx.valueの.valueをつけていなかったのでセルにも反映されませんでしたが.valueをつけると入りました。

  • エクセルVBA

    Sub PlusA001() Dim a As Range Dim b As Integer Range("e1").Value = "氏名" Range("e2").Value = "甲" Range("e2").AutoFill Destination:=Range("e2:e10"), Type:=xlFillDefault Range("f1:j1").Value = Array("国", "数", "理", "社", "英") Set a = Range("f2") For i = 1 To 5 Do Until b = 9 a.Value = Int(100 * Rnd) + 1 b = b + 1 Set a = a.Offset(1, 0) Loop b = 0 Set a = a.Offset(-9, 1) Next i End Sub サンプルコードの例ですが、どうも実行しても納得できない部分があります。それはSet a=a.offset(-9,1)の部分です。Set a = Range("f2")においてf2を始点としているのは判りますが、f2からであればa=a.offset(-9、5) とすればいいのかと思い実行したのですが、ぐちゃぐちゃになります。なぜ(-9、5)ではなく(-9、1)何ですか?いくら読み解いても判りません。教えてください。

  • エクセル並べ替え VBA

    ActiveSheet.UsedRange.Addressで 並べ替えの範囲名を指定することはできないのでしょうか? Sub Sample() Cells(1, 1).AutoFilter ActiveSheet.AutoFilter.Range.Sort Key1:=ActiveSheet.UsedRange.Address, Order1:=xlAscending, Header:=xlYes End Sub を動かすと、実行時エラー1004になってしまいます。 Key1:=Range("A1")にするとうまく行きますが、 キチンと範囲を指定してあげたいのですが、その場合どうすればいいでしょう?

  • Excelマクロについて

    先日、OKWEBで教えてもらったマクロに手を加えて作ろうとしたのですが、エラーがでて動かなくなりました。 わかる方がいましたら教えてください。 よろしくおねがいします。 Sub 見積書() Application.ScreenUpdating = False '見積書(完成)シートを選択 Sheets("見積書(完成)").Select '行の高さを「15」にする。 Rows("6:67").Select Range("F6").Activate Selection.RowHeight = 15 'S列のS6:S56をコピーしてE6:E7に貼り付ける。 Range("S6:S56").Select Selection.Copy Range("E6:E7").Select ActiveSheet.Paste '5列目(工数)が「0」のとき該当する行の高さを「0」にする。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 If Cells(i, 5).Value = "0" And Cells(i, 7).Value = "0" Then Rows(i).RowHeight = 0 End If Next '「E8:E55」の範囲を四捨五入する。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Range("E8:E55") = Application.Round(Range("E8:E55"), 0) '工数を四捨五入 Next 'C列の中に含まれる「小計」を検索しそこから6列目が「0」だったら行の高さを「0」にする。 Dim Rng As Range Const Retu = "C" For Each Rng In Range(Retu & "1", Range(Retu & "100").End(xlUp)) If Trim(Rng.Value) = "小   計" And _ Rng.Offset(, 6) = 0 Then Rng.EntireRow.Hidden = True End If Next Rng End Sub

  • エクセルVBAでLockされてないセルをClearContents

    エクセル2000です。 シートでロックされていないセルだけ中身を削除するマクロを作っています。以下でも一応作動はするのですが、いちいちForNextでまわさずにできないものかと質問させていただきました。 よろしくお願いします。(o。_。)oペコッ Sub クリアテスト() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Locked = False Then c.ClearContents End If Next End Sub

  • VBA

    以下の構文では、理想通りに実行できません。10行目までは大丈夫なのですが、そのあとは何が悪いのかわかりません。 on error resume nextを省略するとオブジェクトが必要ですとエラーメッセージが表示されます。 回答宜しくお願い致します。 sub macro1()  dim a as variant  dim h as range  dim r as long  dim w0 as worksheet  set w0 = activesheet  worksheets.add after:=w0  r = 1  range("A1:G1") = array("苗字","名前","住所","TEL","〒","好きなスポーツ","性別")  on error resume next  for each h in w.range("A1:A" & w.range("A65536").end(xlup).row)   if h <> "" then    a = split(application.trim(replace(replace(h, " "," "),":",":")), " ")    r = r + 1    cells(r, "A") = split(a(0), ":")(1)    cells(r, "B") = split(a(1), ":")(1)    cells(r, "C") = split(a(2), ":")(1)    cells(r, "D") = split(a(3), ":")(1)    cells(r, "E") = split(a(4), ":")(1)    cells(r, "F") = a(5)    cells(r, "G") = a(6)   end if  next end sub

  • Excel VBA 全てのセルの一部に特定の語句があれば置換したい。

    Excel VBA 全てのセルの一部に特定の語句があれば置換したい。 Excel VBA初心者です。 Excelの全てのセルに対して、特定の語句があれば別の特定語句で置換したいのですが、どうしたら良いかわかりません。 全角と半角が混在していますので、これは無視したいですし、変換したい文字列の位置は不定です。Excel 2007です。 取り敢えず、細かなな条件は無視して書いたコードは Dim myCell As Range Sub rep() For Each myCell In Selection myCell.Value = Replace(myCell.Value, "OLD", "NEW") Next myCell End Sub カーソルのある所は置換されますが、それで終わりです。 ご教授下さい。

  • Excel VBA 実行時エラー'1004':

     どちらの処理がより高速であるのかを調べるため、以下の2つのVBAを試作致しました。 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub  処が、これらのVBAを実際に動作させ様としますと、どちらの場合においても「Microsoft Visual Basic」ダイアログボックスが開いて 「実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。  さりとて、 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select ActiveSheet.Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub 或いは Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range(Cells(i, 1)).Value = Rnd Next i Range("B1").Select End Sub 等としましても、今度は 「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」 となってしまいます。  どの部分がどの様に悪いのでしょうか?  そして、どの様に修正すれば良いのでしょうか?  尚、使用しておりますExcelのバージョンはExcel2010です。

M-XPT1MRのボタン設定方法について
このQ&Aのポイント
  • M-XPT1MRを購入した方で、チルトボタンを押してSafariの新規タブを開く設定方法がわからない方への解説です。
  • M-XPT1MRのボタンをカスタマイズして、Safariの新規タブを開く方法についてご紹介します。
  • エレコムのM-XPT1MRの設定画面には、チルトボタンの機能を設定できる項目があります。具体的な手順について詳しく解説します。
回答を見る

専門家に質問してみよう