[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA 数字を千円単位にします』(akio)
いつもお世話になり有難うございます。
一つの表で、月次決算の表があります。
その表(シート名”1円単位”)には、勘定科目名、各項目名、1円単位の数
字、小計(計算式が入っています)等で構成されています。
質問は、
例としまして下記の表1、2、がありますが、それ以外の表が出てきても(項目名とか数字の位置が違っても)1シートの中で1円単位の数字を違うシート名”千円単位”に千円単位になおす方法を教えて頂けますか?
計算式のあるところは、計算式を残します。
月次決算での様々な分析ファイルの表があります。
1、例えば一つの表は、A列に勘定科目名が40行、B列よりK列迄に部門別
名が10あります。
2、ある表は、A列に勘定科目名が40行、B列より右列に、当月の数字、
前月の数字、増減額と増減率(計算式が入っています)
1,2、共 大きなくくりに、A列に営業経費、人件費、経費があります。
営業経費=人件費+経費 人件費=10科目の小計 経費=30科目の
小計
以上ですが、ご指導の程、よろしくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
値そのものを千円単位にするのか表示だけでいいのか、また千円未満は切り捨て・切りあげ・四捨五入、あるいはその他? (ねむねむ) 2017/12/04(月) 08:52
計算部分は元の値で計算した結果を千円単位にするのか、千円単位にした値で計算するのかどちらだろうか? (ねむねむ) 2017/12/04(月) 09:58
(akio) 2017/12/04(月) 10:20
With ActiveCell .Copy .Offset(1).Resize(Cells(Rows.Count, 1).End(xlUp).Row - .Row)'コピーしてA列データ有るまでコピー End With End If Columns(ActiveCell.Column).Value = Columns(ActiveCell.Column).Value '式から値に変換 End Sub (Q::) 2017/12/04(月) 11:32
>Formulaで該当セルに組み込めばいいのではないですか?
ネットで調べましたらFormulaは、計算式を表すところですが、
実際には、計算式がたくさんありますので、該当セルに入れなくて
何か他に方法は、無いですか?
それと上記コードを標準モードで書き実行しましたら
エラー(#NAME?)となります。?
(コードとFormulaの組み合わせが素人ですからわかりません、すみません。)
故に
いくつかのファイル名の違う表は、文字と数値の範囲が様々です。
文字と数値の範囲が様々な各シートであっても下記、1、2、の条件を満たすVBAを
教えて頂きたいと思っています。
1、値そのものを千円単位にします。
そして千円未満は、四捨五入をします。
2、計算部分は、千円単位にした値で計算します。
以上です。
(akio) 2017/12/04(月) 14:19
https://www.moug.net/tech/exvba/0050098.html
>実際には、計算式がたくさんありますので、該当セルに入れなくて
>何か他に方法は、無いですか?
作業シート用意して 一つ一つ整理すればいいと思います
>それと上記コードを標準モードで書き実行しましたら
>エラー(#NAME?)となります。
下記にも説明がありますが
スペルミスはないですか?
https://forest.watch.impress.co.jp/docs/serial/exceltips/1055262.html
>いくつかのファイル名の違う表は、文字と数値の範囲が様々です。
>文字と数値の範囲が様々な各シートであっても下記、1、2、の条件を満たすVBAを
>教えて頂きたいと思っています。
一つに纏める事を先ず考える事が大切と思います
まずは やりたことよりも 自分が出来る事を整理して
ひとつひとつ質問していかないと
自分の考えてる答えはおそらく得られないと思います
>1、値そのものを千円単位にします。
そして千円未満は、四捨五入をします。
>2、計算部分は、千円単位にした値で計算します。
=ROUND(セル/1000,0) この一行の関数で出来ると思います
(Q::) 2017/12/04(月) 15:27
Sub test()
ActiveCell.Formula = "=ROUND(纏めるセル/1000,0)" 'アクティブセルに式挿入 If ActiveCell.Column = 1 Then With ActiveCell .Copy .Offset(1).Resize(Cells(Rows.Count, 1).End(xlUp).Row - .Row)'コピーしてA列データ有るまでコピー End With End If Columns(ActiveCell.Column).Value = Columns(ActiveCell.Column).Value '式から値に変換 End Sub
>=ROUND(セル/1000,0) この一行の関数で出来ると思います。
この関数をどこに入れるのですか?
(akio) 2017/12/04(月) 18:01
どこかのセルでためしにやってみましたか?
新しいシートの
A1のセルに例えば 198600入力
関数が入力セル =ROUND(A1/1000,0) には 199と言う値が反映されると思います
これが先ず 貴方が求めてる結果と思います
これを既存自分のシートにどの様に組み込むかは
レイアウトが完全に解ってない状態で聞くかれても
答えることは出来ません
例えば A1になっているものを A1に該当する数式を入れてみるとか?
(Q::) 2017/12/04(月) 18:08
18:40頃に承知いたしました。とアップしたのですが、
アップされていない事に気づきました。
失礼しました。
>新しいシートのA1のセルに例えば 198600入力 関数が
入力セル=ROUND(A1/1000,0)には、199と言う値が反映されると思います 。
これは、出来ました。
私が、行った上記関数の使い方は、別シートに1円単位と同じデータ(文字も含め)をコピーして、
別シートのA1にこの関数(=ROUND(A1/1000,0)) を1円単位の数字が並んでいる箇所と同じ範囲にコピー
貼り付けをして出来ました。
当初は、VBAでボタンを1回クリックすると=ROUND(A1/1000,0)が数値に反映し千円単位に変われば
いちいち関数を貼り付けして行かなくてもいいと思って思っていました。
要は、関数を利用して出来るとう事ですね。
有難うございました。
(akio) 2017/12/04(月) 21:08
>当初は、VBAでボタンを1回クリックすると=ROUND(A1/1000,0)が数値に反映し千円単位に変われば >いちいち関数を貼り付けして行かなくてもいいと思って思っていました。
こういうこと? 変換範囲を選択してから実行
Sub test() Selection.Value = Evaluate("index(round(" & Selection.Address & ",-3)/1000,,)") End Sub (seiya) 2017/12/04(月) 21:32
>こういうこと?
そうです。(言われるように、変換範囲を選択してからコードを実行しました)
思った通りに出来ました。
有難うございました。
(akio) 2017/12/04(月) 22:58
それは失礼いたしました
(Q::) 2017/12/05(火) 09:04
謝って頂かなくても宜しいですよ、
私が無知なのと説明がうまく伝えていなかったと思います。
こちらの方こそ、色々時間をかけて教えて頂き感謝です。
また今後ともよろしくお願いいたします。
(akio) 2017/12/05(火) 10:14
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.