• ベストアンサー

Excel VBA 計算式を代入するには?

計算式が一部ミスっていまして、計算式を修正したいのですが、中々上手くいきません。結果は全部"0"で返ってきます。 ソースは以下になります。 Sub 全て修正() Dim ws As Worksheet k = 1 For Each ws In ActiveWorkbook.Sheets ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256 k = k + 1 Next End Sub 計算式は 『 F15 * 3 / 256 』 となのですが、 F15 では関数処理をしており、更に元データは以下のような関数処理をそれぞれ行っている状態です。    C列        D列    E列   F列    データ      LIGHT()  LEFT() HEX2DEC() F50A0000000281  000281   0002    2 こんな場合はどんな方法で処理すればよろしいですか? アドバイスお願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(1)エクセルVBAでは数式はRange(1つのセル).Formula="=A1+1"のように、具体的(絶対的)に A1のようにいれます。 Range(2つ以上のセル)Formula=(何かの表現)も出来る。 値の場合 Sub test01() Range("A1: A5") = "abc" End Sub は可能。 式のな場合は Sub test01() Range("A1: A5") = "=B1+1" End Sub でA2には=B2+1のように変化させてくれる。 Sub test01() Range("A1: A5,A10:A15") = "=B1+1" End Sub の場合はA1:A5、A10:A15について、正しく式を変化させてくれる。 以上で複数セルへの同型の式の一度でセットと、セル変化 がOKであることをチェックしました。 >F15 では関数処理をしており、更に元データは以下のような関数処理をそれぞれ行っている状態です。 使っているセルの値が、直接入力されたものでの、関数で 計算されたものでも関係ありません。関数でF15と言うときのF15はそのセルの「値」だけを問題にしてます。 ○本件ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256 とありますが、 (1)Formulaがない (2)関数式が””で囲まれていない が気になりますが、問題ではないでしょうか。

u-mesh12
質問者

お礼

ご指摘されている通りでした。 (2)関数式が””で囲まれていない → ””で囲む事により、 結果が得られるようになりました。 アドバイスありがとうございましたm(_ _)m

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

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

こう言う意味? ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256        ↓ ws.Range("G15:G32,G36:G53,G57:G74") = "=F15 * 3 / 256" あと、変数k は意味をなしてませんね。

u-mesh12
質問者

お礼

>あと、変数k は意味をなしてませんね。 ご指摘ありがとございます。 For文と変数の使用がまだまだ使いこなせて無いようです…。 もう少しがんばってVBA使いこなせるよう成りたいですね。 アドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • keikan
  • ベストアンサー率42% (75/176)
回答No.2

書式に問題があるのでは? 小数点以下の桁数が表示されていなかったりしませんか?

全文を見る
すると、全ての回答が全文表示されます。
  • chupark
  • ベストアンサー率41% (90/218)
回答No.1

Excelのセルの名前とVBAで使用できる変数がごっちゃになっているのではないでしょうか? VBAの中で何の定義もなしにいきなり F15を登場させたのがまずいのではないでしょうか。 すなわち、F15はVBA上では何にも入っていないので0が帰ってくるのではないでしょうか。 ws.Range("F15").value * 3 / 256 などとやってみてはいかがでしょう?

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

関連するQ&A

  • 【Excel VBA】計算結果のみ表示させたい

    Excel2003を使用しています。 あるデータ(表)を別のレイアウトに変更する作業をマクロで処理したく、コードを書いているところです。 F列に[=G列-H列]の数式が入力されていて、別のレイアウトに変更後は、G列とH列は不要になるので削除します。でも、列削除をしてしまうと、F列の値が「#REF!」となってしまうので、F列には、数式ではなく、計算結果(値)のみ表示させたいのですが、どのようにすればいいでしょうか? 一旦、F列以外の別のセルに計算結果を出して、その値のみをF列にコピーしようかとも思いましたが、もし良い方法があれば、教えていただきたく、質問させていただきました。 よろしくお願いします。

  • Excel VBA CHAR( ) でエラーになる

    Excel VBA でマクロ処理を作成してます。 現在エラー直らず困っています。 処理は内容は以下になります。 セルを指定 →『Q11』選択 offset() で+1して列を右に1個移動 で、選択したセルには今計算式が入っているが… その計算式を修正する 修正前  修正後 Q11/3 → Q11 オートフィルでセルの最下位まで確定させる その後,列を右に3コ移動して (offset関数を使用して移動してます) 後はfor文で繰り返せ…  といった処理で,以下がソースになります。 Sub test() Dim str As String n = 1 For i = 1 To 2 Range("Q11").Select.Offset(, n).Select ▲ActiveCell.FormulaR1C1 = "=RC[123]" ★str = CHAR(CODE("Q") + n) Selection.AutoFill Destination:=Range(str & "11:" & str & "160") n = n + 3 Next End Sub ★マークで現在エラーになっている様です。 関数の使用方法が間違っているのか? エラーが直らず困っています。 ▲マークもあまりよくない記述かもしれませんが…試しマクロで作成してコピーしただけのものなので…この辺りもよい記述があればご教授ください。 アドバイス宜しくお願いします。

  • Excel(エクセル)で非表示シートをVBAで計算するには?

    よろしくお願いします。 エクセルで1つのブックにAシート~Fシートまであるとします。 再計算させると、すべてのシートを再計算してしまうため時間がかかるので、マクロの自動記録を利用して「Aシート→Bシート→Cシート→Dシート→Eシート」と、必要なシートだけを順番に計算させる事で、処理時間短縮をさせる事をする事ができました。 EシートとFシートは表示させておいて、その他のA~Dシートは非表示にしました。 Eシートには、A~Dシートで計算した結果が表示されるようになっています。 ですが、A~Dシートを非表示にして作成したマクロを実行すると、エラーが出てしまい上手くできません。 A~Dシートを非表示にしていても、ブック全体を再計算させる事はできます。 非表示にしたシートをマクロで計算させるには、どのようにしたら良いでしょか? アドバイスをお願い致します。 登録したマクロは下記のようになっています。 Sub 計算() Sheets("Aシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Bシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Cシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Dシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select End Sub

  • 文字型変数を使って2進数表示すると、最上位ビットに1を立てると値に-記号が入ってしまいます

    VB6.0 WindowsXP 掲題の件ですが以下のコードを使って16進数を2進数表示にしていますが、最上位ビットに1を立てると値がおかしくなってしまいます。 Private Sub Form_Load() Dim dat(5) As Variant Dim i As Variant dat(0) = Right("0000000000000000" & Hex2Bin(Hex(&HFFFF)), 16) dat(1) = Right("0000000000000000" & Hex2Bin(Hex(&HFFFE)), 16) dat(2) = Right("0000000000000000" & Hex2Bin(Hex(&HFF00)), 16) dat(3) = Right("0000000000000000" & Hex2Bin(Hex(&HF000)), 16) dat(4) = Right("0000000000000000" & Hex2Bin(Hex(&HF0F0)), 16) dat(5) = Right("0000000000000000" & Hex2Bin(Hex(&H7FFF)), 16) For i = 0 To 5 Label1.Caption = Label1.Caption & dat(i) & vbCrLf Next Label2.Caption = "FFFF" & vbCrLf & "FFF0" & vbCrLf & "FF00" & vbCrLf & "F000" & vbCrLf & "F0F0" End Sub Public Function Hex2Bin(Hex) Dim Dec Dec = CInt("&H" + Hex) Hex2Bin = Dec2Bin(Dec) End Function Public Function Bin2Hex(Bin) Dim Dec Dec = Bin2Dec(Bin) Bin2Hex = Hex(Dec) End Function Public Function Dec2Bin(ByVal Dec) Do Dec2Bin = CStr(Dec Mod 2) & Dec2Bin Dec = Dec \ 2 Loop Until Dec = 0 End Function Public Function Bin2Dec(Bin) Dim i As Integer For i = 1 To Len(Bin) Bin2Dec = Bin2Dec * 2 + CInt(Mid(Bin, i, 1)) Next End Function なぜこうなってしまうのか、最上位に1を入れても1000000000000 のように表示させるにはどうしたらよいか教えていただきたいです。 よろしくお願いします。

  • Excel VBA offset()関数で質問

    Excel VBA offset()関数で質問です。 現在集計のマクロを作成しております。 ■処理内容 各sheetの特定の範囲を"copy" して集計sheetに順に貼り付け… といった処理をさせようと作成中です。 以下がソースになります。 Sub 集計() Dim ws As Worksheet i = 1 For Each ws In ActiveWorkbook.Sheets If ws.Name = "集計" Then Else Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy ★Worksheets("集計").Range("A1").Offset(, i).Select ActiveSheet.Paste i = i + 1 On Error Resume Next ActiveSheet.Next.Select End If Next End Sub ★マークのところで現在エラーになっています。 実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。 と表示されます。 offset関数の使用方法の確認ですが… (とあるWebから抜粋したのですが… (^^; ) 例> Range("C3").Offset(,1).Selectとすれば、 行はそのままで、列が1列右に移動し、D3を選択します。 アドバイスよろしくお願い致します。

  • エクセルでの計算

    実は今、計算をしているのですが簡単に関数やマクロを使って計算を出来る方法を知りたいので教えて頂けませんか。 例えば、1,000キロと12時間30分という時間があるとします。これを以下の内容で計算します。 1,000キロ×12時間30分=12,500 {(1,000×12=12,000)+(1,000×30÷60=500)=12,500} という計算なんです。データが沢山あります。何かいい方法はないでしょうか?宜しくお願いします。

  • エクセルの計算処理について

     いつもお世話になっております。  エクセルの計算処理について質問させていただきます。  下図にもございますが、A列に数値があれば(A17)、次の数値(A34)がくるまでは、F列におきまして、最初の数値のみをG列に移したいのですが(F24からG24、さらには、F35からG35)、どのようにすればよろしいでしょうか?  できましたならば、マクロを用いた方法をご教示いただければ、幸甚に存じます。  それでは、よろしくお願い申し上げます。

  • エクセルVBAで不思議な現象が!

    エクセル2010です。 理解できない現象で困っています。 Sheets("DATA")の.Range("B1:S1")には、B1が1、C1が2というように1から18までの数値が連番に入っています。S1には18です。 以下のVBAを走らせると、普通はSheets("test")のRange("B26:S26")にも1から18までの数値が連番に入ります。 Sub TEST() Dim ws As Worksheet Dim lr As Long Set ws = ThisWorkbook.Sheets("DATA") lr = 25 With ThisWorkbook.Sheets("test") .Range("B1:S1").Offset(lr).Value = ws.Range("B1:S1").Value 'データ転記 End With End Sub ところが、このSheets("test")の20行目までデータが入っていて、オートフィルターがかかっているとします。(条件はG列の空白だけ抽出) そして、さらにC列以降のどれかの列が非表示になっていると、その非表示列以降のセルはすべて1になってしまいます! なぜ、このような不思議な結果となるのか理解できません。 やむを得ず、オートフィルタをいったん解除し、列を再表示してから転記するようにしていますが、原因がわかりません。 どなたかご教示いただけませんでしょうか?

  • エクセルの集計計算について

    データ集計の計算で現在 =SUM(IF($F$7:$F$1000=3202,IF(MONTH($Q$7:$Q$1000)=1,$R$7:$R$1000,0)))という式を用いて月ごとの合計数を 取り込んでいます。 F列 係コード  Q列 完成月  R列 完成数量 1課1係では上記の計算式でうまくいったのですが、2係、3係となった場合にうまくいきません 今回お知恵を拝借したいのが、F列に複数の係が混在しているところは、以下の式を作り計算させましたが、なぜか総数が計算されてしまいます。式のどの部分に問題があって、どのように修正すれば言いか教えてください。 1つの課の中に3202という係と3302という二つの係ということで以下の式にしました =SUM(IF(OR($F$7:$F$1000=3202,$F$7:$F$1000=3302),IF(MONTH($Q$7:$Q$1000)=1,$R$7:$R$1000,0))) 2つの係の合計を出したいのです。 また3つの係がある場合はどのように変更すればいいのか教えてください。 よろしくお願いします

  • エクセルの計算

    みなさん教えてください。 今エクセルで、数値計算をしていて悩んでいます。 <悩み> 下記のような数値(約1500個)がA列にあり、下記条件に合致すれば 指定する計算式で計算し、B列に答えを出したいと思っていますが、う まくいきません。 IF関数を使いましたが0以上の場合しか指定できませんでした。 =IF(A:A>=0,(F:F*0.01)) みなさん教えてください。 よろしくお願いします。 <条件>計算式 A列にある数値が0以上の場合 : A列の数値*0.01 A列にある数値が0以下の場合 : A列の数値*0.5 <数値> A列 ------- 1 1 2 -1 -2 -5 1 5 3 ・ ・ ・