こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAを用いて手動で選択した範囲の数式の置き換え

エクセル2007にて手動で数値入力をしています。
効率の悪い方法なのですが、
入力方法自体はこのまま、変えずにやりたいと思っています。
入力内容は、例えば 100x20ほどのセルのあるところ、空白のところに「2」と入れたり
しばらく後に先ほどの「2」のところに「=2+4」と付け足したり
さらにしばらく後に「=2+4+5」と付け足したりしています。

「したいこと」はある程度入力が進んだところで、
100x20ほどのセルを「マウスなどで選択」し、その選択した範囲のセルの中身の
「=2+4+5」のセルを計算し「=11」に置き換え、(左に”=”を付けたい)
「3」や「=3」「=+3」のセルを「=3」に置き換え、(やはり左に”=”を付けたい)
ただし「空白」のセルは「空白」のままにして置きたいのです。

Q1)上記の「したいこと」をVBAでできるでしょうか
Q2)Q1に加えて 「0」のセルは「=0」と置き換えられるでしょうか
Q3)間違ってイコール無しで入力した「1+2+3」も計算して「=6」(左に”=”)にできるでしょうか
Q4)VBAで実際に動くものを組んでもらえないでしょうか
後々、最終的には自分で勉強してVBAを組めるようになりたいのですが
今必要なのは上記の操作のみなので、実際にVBAで作成したものが欲しいです。

現在はマウスで選択、形式選択(値)貼り付けして、手動でその都度”=”を付け足しています

投稿日時 - 2011-04-14 20:30:48

QNo.6668380

困ってます

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

Sub macro1()
 Dim h As Range
 Dim Target As Range
 On Error Resume Next
 Set Target = Selection.SpecialCells(xlCellTypeConstants, xlNumbers)
 If Target Is Nothing Then
 Set Target = Selection.SpecialCells(xlCellTypeFormulas, xlNumbers)
 Else
 Set Target = Union(Target, Selection.SpecialCells(xlCellTypeFormulas))
 End If

 For Each h In Target
  h.Formula = "=" & Application.Evaluate(h.Formula)
 Next
End Sub


簡易版です。なので,ご質問で明記されていない入力内容が選択範囲内にあった場合は,意図しない結果となるかもしれません。

駄目な例:
="a"
と記入されていた場合など。

投稿日時 - 2011-04-14 21:01:37

お礼

ありがとうございました。
自分で勉強してちょこっと書き足して完全版ができそうです。

投稿日時 - 2011-04-15 19:13:44

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

多分質問者のやろうとしていることは、数を数式にVBAで変化させ、入力待ちにして、何かの数を人間の入力で入れて計算(質問では加減どまりらしい)をしたい。
初心者の考えそうな珍奇な方法だな。
>100x20ほどのセルのうち、
質問の操作の対象セルはどうなるを書かないと質問にならないのでは。
そのセルを選択(決める)条件は何なのか。質問者の(総合的?)判断で無いと判ら無いのか?
ーー
質問の主旨を間違えていなければ、私の思いついた「珍奇な」方法
(1)テキストボックスを1つシートに設ける
(2)シートのSelection_Changeイベントに
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Formula = "=" & Val(Target.Value) & "+" & Val(TextBox1.Text)
End Sub
判らなければGoogleで「Worksheet_SelectionChange」で照会し勉強のこと。
===
テキストボックスに、加える数を入力。毎セルに置いて、先に行うこと(忘れやすいから注意)。引き算したい場合はマイナスをつけて入力。
シートのセルをクリック
そのセルの値にテキストボックスの値を加えた数をそのセルに設定(自動計算)。
空白のセルは0の扱い。テキストボックスも空白は0の扱い。
ーー
数式バーへのVBAによる入力のコントロールの方法が判らない(高等技術?API?)ので上記で辛抱。

投稿日時 - 2011-04-14 22:24:00

お礼

回答ありがとうございました。
自分の説明が悪くてわかりづらくてすいませんでした。
自分でも今の入力の方法がアナログな効率の悪いものだと自覚しており、
今回の回答を参考に勉強させていただきます。

投稿日時 - 2011-04-15 19:23:33

ANo.3

こんばんは!
一例です。
範囲指定した後にマクロを実行してみてください。

Sub test()
Dim c As Range
For Each c In Selection
If c <> "" And IsNumeric(c) Then
c = "=" & c
End If
Next c
End Sub

こんな感じではどうでしょうか?m(__)m

投稿日時 - 2011-04-14 21:11:41

お礼

ありがとうございました。
シンプルな書き方もあるんですね

投稿日時 - 2011-04-15 19:11:44

ANo.1

これでできましたよ。


Sub sanple()

Dim i As Range
ActiveSheet.UsedRange.Select

For Each i In Selection
i.Value = "=" & i
Next i

End Sub

投稿日時 - 2011-04-14 20:39:54

お礼

早速の回答ありがとうございました。
自宅のPCのエクセル2002(?)では動作が違うという新たな発見もありました。
参考にして勉強します。

投稿日時 - 2011-04-15 19:18:43

あなたにオススメの質問