エクセル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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Visual Basic(VBA) VBAで重複した値のセルに色付けをしたい 1 2022/11/02 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
多量のSUMIF式を軽くしたい
-
配列でデータが入っている要素...
-
モジュラス103の算出方法について
-
VBA 空白セルを削除ではない方...
-
この行は既に別のテーブルに属...
-
メモ帳(テキストデータ)をExc...
-
ユーザーフォームのテキストボ...
-
アクセス2000で画像データ...
-
GridViewの行の一部を複数行にする
-
VBA 判定文で理解できない結果...
-
Excelのマクロでワードのテキス...
-
エクセルVBAでもっと早く転記
-
VBAで「"」[']をエスケープする...
-
ページ数を求めたい
-
[VBA] CountIfに変数を使いたい
-
C言語について
-
VBAを使ってOutlookメール本文...
-
ブレーカー落ちで壊れたりしな...
-
S9タイプからXタイプにデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報