エクセルVBAで数式を削除して値を残すマクロ

このQ&Aのポイント
  • エクセル2013のVBAを使用して、数式を削除して値のみを残す方法を教えてください。
  • 表の特定の列にある数式を削除し、値だけを抽出するためのマクロを作成したいです。
  • 行数が変化する場合でも、範囲内の関数を削除して値のみを残す方法を教えてください。
回答を見る
  • ベストアンサー

数式を削除して値だけ残すマクロ

お世話になります。 エクセル2013のVBAについて教えて下さい。  Q       R 1 タイトル   タイトル ←1行目はタイトル行 2 状況出荷済  出荷済 3 状況準備中  準備中 4 状況未出荷  未出荷 このような表でQ列の文字をR列にRIGHTで文字を抽出しました。 行数は表を作る都度変わります。 Rに入っている関数を削除して値のみ残したいです。 100行だった場合は Range("R2":"R100") Selection.value=Selection.value で実行可能なのですが、範囲が変化する場合はどう書けばいいでしょうか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

sub macro1()  on error resume next  with range("R:R").specialcells(xlcelltypeformulas)   .value = .value  end with end sub みたいに。 #数式が実はひとつも入ってなかったみたいな場合にも,エラーにならないように細工をします。 #参考 実際には,どこまで数式が入ってる「可能性があるか」だけで sub macro2()  range("R2:R999").value = range("R2:R999").value end sub とか sub macro3() ’あまりお勧めはしません  range("R:R").value = range("R:R").value end sub とかでもかまいません。

sunny_orange
質問者

お礼

ありがとうございます。 最初に書かれているやり方で解決できました。

その他の回答 (2)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

r = 100 Range("R2":"R" & r).Selection.Value = Selection.Value というように、変数が使えますから、単に変数にして、「r」を変化させれっばいいと思います。 また、この変数「r」が最終行であれば、「r = Range("R1").End(xlDown).Row」のように、列「R」の最終行を取得するようにしておかれてはどうでしょうか?(この場合、「R」列は途中に空白が存在するとダメですが)。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>範囲が変化する場合はどう書けばいいでしょうか? Q列の行数を取得すれば With Range("Q2", Cells(Rows.Count, "Q").End(xlUp)).Offset(, 1) .Value = .Value End With

sunny_orange
質問者

お礼

ありがとうございます。 参考になりました。

関連するQ&A

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

    マクロ初心者です。 A~D列の表が少ない時100行、多い時400行あり、同じ操作を何回か繰り返すため、できればマクロで処理したいと思っています。 マクロ記録で作成したのですが、最終行が一定ではないため行数が増えると上手く作動しません。 どこを修正したらいいでしょうか。ご教示いただければ幸いです。 Sub Macro1() ' ' Macro1 Macro ' ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""集計"","""")" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G4"), Type:=xlFillDefault Range("G2:G4").Select Range("H2").Select ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R13C1,RC[-1],R2C2:R13C2)" Range("H2").Select Selection.AutoFill Destination:=Range("H2:H4"), Type:=xlFillDefault Range("H2:H4").Select Range("H5").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" Range("H6").Select End Sub ちなみに作成したいマクロ 1.F列にA列の「集計」を取り出して、G列にF列の「集計」文字を取り除く。 2.H列にB列「数」を計算する 3.H列の最終行に合計を出す。

  • エクセルでセルの値がTRUEかFALSEか判定

    Q3:R19の表があります。 Q列にはTRUEかFALSEが入りますが、空白や文字列の場合もあります。 R列には文字列です。 Q列でFALSEのセルだけ、同じ行のとなりのR列の文字列を順に抜き出し、メッセージボックスに表示したいのです。 下記のようなVBAを書いてみましたが、Q列が空白や文字列の場合まで抽出されてしまいます。 これを排除するいい方法はないでしょうか? Sub test01()   Dim msg As String   Dim i As Long   With Sheets("LOG")     For i = 3 To 19       If .Range("Q" & i).Value = False Then '        Debug.Print  i & "-" & .Range("R" & i).Value         msg = msg & .Range("R" & i).Value & vbCrLf       End If     Next i   End With   If msg <> "" Then     MsgBox msg & vbCrLf & "上記により不可です。", vbCritical   End If End Sub

  • Excelマクロ、特定行の削除

    A列に日付か文字のどちらかが入力してある表があります。  A列(日付文字) B列(時刻) C列以下(その他データ ) 日付は全て同じ日付(11月11日なら全部これ)で、文字も全て同じ文字です。 日付またはB列が時刻(さまざまな数値)の行を削除して、A列が文字の行だけ残したいのです。 Range("2:2").Select Selection.Delete Shift:=xlUp これを表範囲で繰り返すのはわかります。 "2:2"の所に変数を用いると思いますが、変数に日付の行を指定したりするコードが分かりません。 A列が文字の行を検索し、それ以外の行を削除でもよいのですよね。 よろしくお願いします。

  • マクロについて

    すみません、初心者です。ご教示ください。 今、表中の合計行(表の最終行)の上に、行を挿入するマクロを作成しておりまして。 【コマンドボタンを押すと、ウィンドウが出てきて、挿入したい行数を入力すれば、その分だけ挿入される】 Sub 表の行挿入() Dim r2 As Long Dim r As Long Dim rge As Range A列に合計欄があることが前提 Set rge = ActiveSheet.Range("A:A").Find("計") if rge Is Nothing Then Exit Sub r = rge.Row r2 = TextBox1.Text If r2 > 0 Then ActiveSheet.Range("A" & r & ":F" & (r + r2 - 1)).Insert xlDown ・・・ とここまで記述して、なやんでいます。 表はこの場合A列からF列までの範囲のものなのですが、 上記AやFという記述ではなく、マクロにて表の範囲指定を、うまくできないかな、と。 よろしくお願いいたします。

  • EXCELマクロで左列に値のある行まで選択

    EXCELのマクロの記録を利用して簡単なマクロを作りたいのですが、 やりたいことは、表の最上部のセルにVLOOKUP関数を設定し、 フィルハンドルでWクリックするように表の最下部までコピーしたいのですが、 マクロの記録では、貼り付けする先のセルが固定されてしまい、 表の行数が変動する場合はそのまま使えません。 左列に値のあるセルを判断してその行番号までを選択できれば解決するのですが、 お詳しいかたお教えください。 ちなみにマクロの記録の構文では <フィルハンドルでクリックする場合> ActiveCell.FormulaR1C1 = "=VLOOKUP(RC7,'10FY'!R2C1:R1321C2,2,0)" Selection.AutoFill Destination:=Range("H3:H27") Range("H3:H27").Select End Sub <範囲選択しコピー貼り付けする場合> ActiveCell.FormulaR1C1 = "=VLOOKUP(RC7,'10FY'!R2C1:R1321C2,2,0)" Selection.Copy Range("H4:H27").Select ActiveSheet.Paste End Sub

  • マクロの行不足対処法を教えてください。

    現在下記の様なコードを作成しています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$13" And Target.Address <> "$F$14" _ And Target.Address <> "$F$15" _ And Target.Address <> "$F$16" _ And Target.Address <> "$F$17" _ And Target.Address <> "$F$18" Then Exit Sub Application.EnableEvents = False With Sheets("部材表") .Range("R14").Value = Range("F13").Value .Range("S14").Value = Range("F14").Value .Range("T14").Value = Range("F15").Value .Range("R19").Value = Range("F16").Value .Range("S19").Value = Range("F17").Value .Range("T19").Value = Range("F18").Value End With Application.EnableEvents = True End Sub このコードの And Target.Address <> "$F$16" _ 部分と .Range("R19").Value = Range("F16").Value 部分を増やしていくと、行継続文字 () の使いすぎとの事で、 ヘルプに下記の文章があります 行継続文字で継続されている行が、25 行を超えているか、または 1 つの論理行に 24 を超える行継続文字があります。 いくつかの行を物理的に長くして必要な行継続文字数を減らすか、複数のステートメントに分割します。 どの様に対処したらよろしいでしょうか?

  • エクセル マクロ 抽出

    教えてください。 ○と記入されたセルを参照して、一つ上のセル・A列にある同じ行のセル・ 9行目にある同じ列のセルを抽出しようとしています。 下記の通り入力すると 行数=値.Rowでエラーが出たしまいました。 試行錯誤頑張りましたが解決できそうにありませんのでお力を貸して頂けないでしょうか。 Sub 抽出() Dim i, 行数, 列数 As Long Dim 値 As Range i = 0 行数 = 値.Row 列数 = 値.Column For Each 値 In Sheets("sheet1").Range("C12:R171") If 値.Value = "○" Then i = i + 1 With Sheets("sheet2") .Cells(i, 3).Value = Sheets("sheet1").Cells(行数, 1).Value .Cells(i, 4).Value = Sheets("sheet1").Cells(9, 列数).Value .Cells(i, 5).Value = 値.Offset(-1, 0).Value End With End If Next End Sub

  • マクロ 結合セルへ値のみ貼り付けるにはどうしたらよいでしょうか。

    マクロは初心者で、まだまだ勉強しているところです。 シート名「入出金履歴」のデータを顧客コードごとに分かれている別シートへデータを振り分けて貼り付ける、もしくは反映させたいのですが、貼り付け先のセルがシートの都合上、結合セルになっており、下記のマクロだと当然ながらエラーになってしまいます。結合セルをまず、解除してから貼り付けようと思ったのですが、うまくいかず、困っています。 コピー先の結合状態は、7行目から、列A:C、列D:E、列F:H と、3列になるように結合されています。結合されている行の終わりは、A:C(結合されている)列に「合計」の値が入っているセルの行、H列まで、3列になるよう結合されています。 解除する以外に、良い方法があれば是非教えていただきたいです。 よろしくお願いします。 Sub samplea() r1 = ActiveCell.Row r2 = r1 + Selection.Rows.Count - 1 Dim myRange As Range Dim s_no As String For i = r1 To r2 s_no = Cells(i, 2) Range(Cells(i, 4), Cells(i, 9)).Select Selection.Copy Sheets(Format(s_no)).Select Set myRange = Columns("a:c").Find(what:="合計") If myRange Is Nothing Then Debug.Print "Not Fount" Else myRange.Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Sheets("入出金履歴").Select End If Next End Sub

  • エクセルマクロでセルの値を下へコピーするには

    ご教授下さい。 毎日送られてくる項目数の多い表を、必要な項目のみ取り出して表を整理するマクロを組んで使っています。しかし、日によって行数が違う為、ある列に数式を入力して下へコピーする場合、マクロ操作が終わってからオートフィルを使って下へコピーしています。行数が違っても行数分だけ下へコピーできるマクロを教えて下さい。何卒よろしくお願い致します。      A列   B列   C列   D列     E列 1行    豆   10入   2個   100円   (数式CXD)200円 2行   飴   20入  3個   150円   (数式CXD)450円  3行   餅   10入   4個   100円  (数式CXD)400円 4行   麦   15入   2個   200円   ↓ 5行   米   20入   4個   100円   ↓ 上記のような表でE列の数式を下へコピ-するマクロです。 日によって行数に違いがある場合でも行数分だけ 下へコピー出来るマクロを教えて下さい。

  • このマクロ、どこがおかしいですか?

    i5とj5のセルの文字が同じ場合はセル同士を結合して一つ下の行へ行き、i5とj5のセルに何も書かれていないときはそのまま一つ下の列へ行き、行った先のセルでも同じように処理(i6とj6のセルの文字が同じ場合はセル同士を結合して一つ下の行へ行き、i6とj6のセルに何も書かれていないときはそのまま一つ下の列へ行き)を繰り返し、と言うことをi33とj33のセルまで続けたいと思っています。 Sub よろしくお願いします() Dim i As Integer For i = 5 To 33 Cells(i, 9).Select If Cells(i, 9).Value = Cells(i, 10).Value Then Range(Cells(i, 9), Cells(i, 10)).Merge Selection.Offset(i + 1).Select ElseIf Cells(i, 9).Value = "" Then Selection.Offset(i + 1).Select Next i End If End Sub と書いたのですが、『Nextに対応するForがありません』と言われてしまいます。どうすれば思い通りにできるでしょうか? 極めて初心者で、伝わりにくい点があるかもしれません。よろしくお願いします。

専門家に質問してみよう