Excel VBAで、あるセル範囲に一気に数式を入れる方法がわかりません。 詳しい方、どうぞ教えてください。 やりたいことは↓です。
Excel VBAで、あるセル範囲に一気に数式を入れる方法がわかりません。 詳しい方、どうぞ教えてください。 やりたいことは↓です。 Sheet1のRange(Cells(2 , Ca) , Cells(2 + N , Ca))に入力されている値を 小数点以下3桁に丸めて Sheet2のRange(Cells(2 , Cb) , Cells(2 + N , Cb))に表示させたいです。 Ca、Cb、Nは変数です。 X = Sheets("Sheet1").Cells(2 + N - 1, Ca).Value Sheets("Sheet2").Cells(2 , Cb).Value = WorksheetFunction.Round(X, 3) として、For~Nextでセル1つずつ設定していたのですが、 Nが1から150、CaとCbが1から100まで変化するので、 処理に時間がかかって困っています。 VBAを使わずに関数で処理した場合のイメージは画像参照ください。 なお、Sheet1の数値は、行方向には連続しますが、 列方向は飛び飛びなので、一気に選択することができません。 よろしくお願いいたします。
Visual Basic | Excel・218閲覧
ベストアンサー
提示のシートレイアウトであるのなら、以下のようなものでしょうか? ・sheet1で実施される前提です。 ・セル値のクリアや値設定が必要ないのであれば、コメントアウトまたは削除してください。 ・「Private Sub CommandButton1_Click()」はACTIVEXのボタンの場合です。実施環境にあわせてください。 ・データ量の影響でレスポンスが遅かったら、ごめんなさい。 Private Sub CommandButton1_Click() Dim ws As Worksheet, iRowsCount As Long ''シート変数を設定する。 Set ws = Worksheets("sheet2") ''以前のセル値をクリアする。 ※必要? ws.Range("F2:J2").Resize(Rows.CountLarge - 1).Clear ''2行目(最初のデータ行)に式を設定する。 ws.Range("F2").Formula = "=ROUND(sheet1!C2,3)" ws.Range("G2").Formula = "=ROUND(sheet1!F2,3)" ws.Range("H2").Formula = "=ROUND(sheet1!E2,3)" ws.Range("I2").Formula = "=ROUND(sheet1!K2,3)" ws.Range("J2").Formula = "=ROUND(sheet1!H2,3)" ''セル値を丸めてコピーする。 iRowsCount = Range("C2", Cells(Rows.CountLarge, "C").End(xlUp)).Rows.CountLarge ''3行目以降に式をコピーする。 If iRowsCount > 2 Then ws.Range("F2:J2").Copy ws.Range("F3").Resize(iRowsCount - 1) End If ''2行以降のセル値を値にする。※必要? With ws.Range("F2:J2").Resize(iRowsCount) .Value = .Value End With ''シート変数を開放する。 Set ws = Nothing End Sub
ご教示ありがとうございます。 "=ROUND(sheet1!C2,3)"のC2のC(列)も変数になるため、 R1C1で記述しようと画策していますが上手くいきません…。 お手数ですが、良い方法をご存じでしたら教えてくださいm(__)m
質問者からのお礼コメント
皆さんの良いとこ取りをさせていただいたのですが、 最終形がtak********さんのものに1番近かったので ベストアンサーとさせていただきました。 皆様、ありがとうございました。
お礼日時:6/24 15:45