
セルA1をコピーして、セルA2に値の貼り付けをするVBAを作っています。
下記のように記述しているのですが、
セルA2に値の貼り付けをするときに小数点第3ケタ目以下はデータを捨てることは出来ますでしょうか?
セルの設定で小数点2桁目まで表示するのではなくて、セルに入力するデータを小数点2桁の数字にしたいです。
range("A1").Copy
Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
#4、cjです。
#1、#3-5、と、Excel数式とVBAを組み合わせた応用例が続いていますが、
「Excel VBA」ならではの手法、ということでは共通していますね。
蛇足ですが、#4に追記することにします。
> 今やらなければならない仕事を早く片付けたい、
> マクロは使い捨てだから早く書けて結果さえ出せればればどうでもいい、
この意味を伝えるには実際の書き方を提示しないと通じなかったですね。
#4の3例を「結果さえ出せればれば」「早く書けるものがいい」
という意図を徹底して書く場合は以下のようになります。
[b1:b30000]=application.text([a1:a30000],"#.00")
[b1:b30000]=[if(a1:a30000,int(a1:a30000*100)/100)]
[b1:b30000]=[index(rounddown(a1:a30000,2),)]
これを使い捨てマクロに手早く記入すること、もありますが、
イミディエイトウィンドウに書き込んでそのままEnterで実行して、
ちゃっちゃと片付ける、という使い方の方が多いです。
1例目と3例目等は、特に頻繁に使うMy定番書式なので、
さらっと書いて片付ける、という感じです。
My定番書式でいうと、
H列とI列の文字列等を連結してJ列に返す配列処理
[j1:j100]=[h1:h100&i1:i100]
こんな↑のも、私はよく使います。
私の回答の趣旨としては、
目的をはっきりさせて、その目的に適う方法を
自分のスタイルの内のひとつに加える、ということです。
「早く書く」「処理が速くなるように書く」
「誰にでも解るように書く」「後から書き替え易いように書く」
「後々の仕様変更に備えた書き方をしておく」とか、
色々な場合があって、その色々に応える形で書き分ければいいのだと思います。
目的から、方法を選べばいいので、
「この方法は避けたい」とか「最初に方法ありき」みたいなことには
あまり囚われ過ぎないようにして欲しいな、と思っています。
No.5
- 回答日時:
こんにちは。
>式が入った3万行分のデータを値の貼り付けで桁数を減らしたいのですが、
>For~Next文でやるしかないですか?
For ~Nextで出来るのなら、別にスタイルにこだわる必要もないと思います。3万行であろうが、そんなに時間の掛かる話ではないし、私が、最初の掲示板デビューの時には、マクロが6時間以上掛かるけれどもという相談で、私が、それを20分程度にまで短縮したと喜ばれましたからね。今では、考えられない話です。
そんな昔の話はとかもくとして、例えば、こんなマクロで出来ますね。
ここに出ている、どの回答でも、良いとは思いますが、私は、なにか自慢げに裏ワザ的なものを書いているようですが、こんなものを、わけも分からず使うのはお勧めしません。以下が、読めるようなら、掲示板には聞かないかもしれませんが、こういうコードにどっぷりハマってしまうようだと、私個人は、何かオシマイのような気がしているのです。なぜかというと、ここには、プログラミングとしてのロジックが存在しないからです。言い換えると、Excelそのものは、世界中の人が、裏ワザ的なものを探し求めて日進月歩で、私などは敵わないと思うことが多いのですが、プログラミングの世界はロジックであって、それそのものは旧態依然で、十分な気がします。
'//
Sub Test1()
Dim Ar As Variant
Dim Rng As Range
Set Rng = Range("A1", Cells(Rows.Count, 1).End(xlUp))
Ar = Application.RoundDown(Rng, 2)
Rng.Value = Application.Index(Ar, 0, 1)
Set Rng = Nothing
End Sub
'//
No.4
- 回答日時:
こんにちは、お邪魔します。
1行で書けなくもない、という例を紹介してみます。
四捨五入なら、
Range("B1:B30000").Value = Application.Text(Range("A1:A30000").Value, "#.00")
切り捨てなら、
Range("B1:B30000").Value = Application.Evaluate("IF(A1:A30000,INT(A1:A30000*100)/100)")
とか、
Range("B1:B30000").Value = Application.Evaluate("INDEX(ROUNDDOWN(A1:A30000,2),)")
とかの方法もあります。
3例とも、Excelの配列数式をVBAで応用する例です。
こういうのを見ると"裏ワザ"と蔑む人がいますけれど、
VBAに用意されている
WorksheetFunction.Text メソッド
Application.Evaluate メソッド
共に、こういう時にこそもてる力を発揮するもの、ではあります。
まぁでも、誰にでも理解され易いものではないという意味では、裏ワザ的ではあります。
VBAの完成度を求めるなら最適化に努めながらループするのが当然ながら一番です。
ここに挙げたのは、
今やらなければならない仕事を早く片付けたい、
マクロは使い捨てだから早く書けて結果さえ出せればればどうでもいい、
というように、目的やその優先度がはっきりした局面などでは、
役に立つ機会が多い手法だと思います。
質問への回答用にダミーサンプルを作る機会が多い私などには、
無いと困るような書式だったりもします。
本題にそった話として、
何が何でもPasteSpecialに拘るなら、
クリップボードのデータを書き換えるような手もあるにはあります。
でも、求める処理のシンプルさに比して、手間が掛かりすぎるものになってしまいますから、
目的には適わないですよね。
以上です。
No.3
- 回答日時:
式を入れて値に置き換えればどうでしょうか。
(例)
With Range("B1:B30000")
.Formula = "=ROUNDDOWN(A1,2)"
.Value = .Value
End With
No.1
- 回答日時:
こんにちは!
コピー&ペーストではなく、単純に値を表示させてはダメですか?
Range("A2") = WorksheetFunction.RoundDown(Range("A1"), 2)
といった感じで・・・m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
値が入っているときだけ計算結...
-
至急!尿検査前日にオナニーし...
-
VLOOKUP関数を使用時、検索する...
-
【Excelで「正弦波」のグラフを...
-
MIN関数で空白セルを無視したい...
-
EXCELで式からグラフを描くには?
-
検便についてです。 便は取れた...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
2つの数値のうち、数値が小さい...
-
尿検査の前日は自慰控えたほう...
-
小数点以下を繰り上げたものを...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
風俗店へ行く前のご飯
-
値が入っている一番右のセル位...
-
EXCELで条件付き書式で空白セル...
-
彼女のことが好きすぎて彼女の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報