
エクセル2000です。
以下は、列をコピーし行にペーストする作業を含むVBAですが、もっとスマートに早く転記する方法がありましたらご教示ください。
お願いします。
Sub TEST()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
Sheets("データ").Range("B8:DH8").ClearContents
With Sheets("入力")
.Range("G8:G68").Copy
Sheets("データ").Range("C8:BK8").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("G14:G15").Copy
Sheets("データ").Range("BM8:BN8").PasteSpecial Paste:=xlValues, Transpose:=True
Sheets("データ").Range("BQ8") = .Range("G21")
Sheets("データ").Range("BR8") = .Range("G23")
.Range("G25:G29").Copy
Sheets("データ").Range("BS8:BW8").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("G32:G68").Copy
Sheets("データ").Range("BX8:DH8").PasteSpecial Paste:=xlValues, Transpose:=True
End With
Application.CutCopyMode = False
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
No.3ベストアンサー
- 回答日時:
こんにちは ^^
色んな方法あって迷いますね。
この手の処理では、
一括で読み込んで
配列経由で(素直に(?)ループ)処理して
一括で吐き出す
という方法がまぁ速いのかなぁと。
TRANSPOSE系の動作が(XL2000では特に)重いように私は感じるので、
ご提示のコードの実行速度への不満についても
同じ2000ユーザーとしては解る気がします。
以下のコードの要点は、
-Variant型の変数(配列)と、セル範囲との間で相互に
値を一括でIn/Outできる-
Excel(ExcelVBA)ならではの優れた機能、
です。
丁寧な動作確認や計時や比較などは今回しませんでしたが、
どうでしょうねぇ。
(App系の処理は省略しました)
Sub Test()
Dim i As Long
Dim vntSource
Dim vntPrint
vntSource = Worksheets("入力").Range("G8:G68").Value
ReDim vntPrint(0, 110)
For i = 1 To 110
Select Case i
Case Is <= 61
vntPrint(0, i) = vntSource(i, 1)
Case 63 To 64
vntPrint(0, i) = vntSource(i - 56, 1)
Case 69 To 73
vntPrint(0, i) = vntSource(i - 51, 1)
Case Is >= 74
vntPrint(0, i) = vntSource(i - 49, 1)
End Select
Next i
vntPrint(0, 67) = vntSource(14, 1)
vntPrint(0, 68) = vntSource(16, 1)
Worksheets("データ").Range("B8:DH8").Value = vntPrint
Erase vntSource: Erase vntPrint
End Sub
こういうのって
コーディングに至るまでの設計が、慣れないと大変かも知れませんね。
Index同士をどう対応させるか...数値を採ったりする時私は、
Excelのシートに作表して、Excelの機能を活用するようにしています。
参考になればよいのですが
参考URL:http://www.clayhouse.jp/array/array.htm
No.2
- 回答日時:
こんにちは。
1回だけの実行なら、速度はたいして問題になりそうもないので、検証していません。
コピー元の範囲がG8:G68だけなので、行列の変換は一度だけで良いと考えられます。
コピー・ペーストの部分のみ、書換えてみました。
(範囲はきちんと確認していませんので、再確認してください)
Sheets("入力").Range("G8:G68").Copy
With Sheets("データ")
.Range("C8:BK8").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("BM8:BN8").Value = .Range("N8:O8").Value
.Range("BQ8").Value = .Range("P8").Value
.Range("BR8").Value = .Range("R8").Value
.Range("BS8:BW8").Value = .Range("T8:X8").Value
.Range("BX8:DH8").Value = .Range("AA8:BK8").Value
End With
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
メモ帳(テキストデータ)をExc...
-
【エクセル】測定時間がバラバ...
-
二分探索の平均探索回数
-
多量のSUMIF式を軽くしたい
-
VBAでシートからコンボボックス...
-
Accessで該当データにフラグを...
-
配列でデータが入っている要素...
-
EXCELVBAでSQLserverからデータ...
-
エクセルで2つの時系列のデー...
-
DataGridViewのデータの引渡し...
-
プログラミング python pandas ...
-
[C言語] コメント文字列を無視...
-
この行は既に別のテーブルに属...
-
ActiveReportについて
-
シリアル通信プログラム(受信...
-
0が含まれる幾何平均が「#NUM!」
-
CString型の文字列連結について
-
FFTを使って信号から特定の周波...
-
javaでDBからデータを取ってき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
ACCESSからEXCELに出力する際、...
-
この行は既に別のテーブルに属...
-
特定のデータの抽出方法を教え...
-
Accessで該当データにフラグを...
-
Excel VBAでのオートフィルター...
-
ユーザーフォームのテキストボ...
-
[C言語] コメント文字列を無視...
-
DataGridViewのデータの引渡し...
-
エクセルで2つの時系列のデー...
-
VBA 空白セルを削除ではない方...
-
CString型の文字列連結について
-
S9タイプからXタイプにデータ...
-
C# でDataTableの更新を高速化...
-
VBA 円グラフ 特定条件に一致し...
-
二分探索の平均探索回数
おすすめ情報