Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2761 / 13646 ツリー ←次へ | 前へ→

【66102】軽量化VBA 烏龍茶 10/7/29(木) 17:09 質問[未読]
【66103】Re:軽量化VBA neptune 10/7/29(木) 22:25 発言[未読]
【66104】Re:軽量化VBA じゃがりきん 10/7/30(金) 4:52 発言[未読]
【66120】Re:軽量化VBA metabeaux 10/8/2(月) 15:57 回答[未読]

【66102】軽量化VBA
質問  烏龍茶  - 10/7/29(木) 17:09 -

引用なし
パスワード
   Excel2003です。

ブック内(シート内でもかまいません)の数式を全て値に変更し、
空欄行・列を削除し、保存するというVBAは組めませんでしょうか。

自分の力では全セルを選択して、コピーして、値のみで貼り付け。
というマクロを記録して変換したような残念なものになってしまい、
最終行・列の特定にも苦労しています。

できれば美しいコードですっきりさせたいです。
宜しくお願いします。

【66103】Re:軽量化VBA
発言  neptune  - 10/7/29(木) 22:25 -

引用なし
パスワード
   ▼烏龍茶 さん:
>Excel2003です。
>
>ブック内(シート内でもかまいません)の数式を全て値に変更し、
>空欄行・列を削除し、保存するというVBAは組めませんでしょうか。
>自分の力では全セルを選択して、コピーして、値のみで貼り付け。
>というマクロを記録して変換したような残念なものになってしまい、


worksheets("Sheet1").range("A1").value = worksheets("Sheet2").range("A1").value
で、sheet2のa1セルのデータがsheet1のa1セルに代入されます。

どういう状態が空欄行・列であるかという定義で判断の仕方は違ってきます。
・・・基本同じようなもんですけど。

>最終行・列の特定にも苦労しています
過去ログをこれらのワードで検索すると山ほど参考になるものがあると思います。

いずれにしても少しは勉強しないとマクロの記録の変更もできませんから
下記で勉強してみては如何?ここでマクロ作ってもらっても後で変更、改造
が必要になると自分が困ることになります。

ht tp://www.sanynet.ne.jp/~awa/excelvba/kouza.html
なんか系統だって解説しているような?目次しか見てませんけど。。。

【66104】Re:軽量化VBA
発言  じゃがりきん  - 10/7/30(金) 4:52 -

引用なし
パスワード
   参考になるかわからんが100×100の範囲の0〜255の数字を
テキストファイルに読み書きするマクロ

Sub syuturyoku()
Dim a, b(99, 99) As Byte, c, d, e
For d = 0 To 99
For e = 0 To 99
b(d, e) = Cells(d + 1, e + 1)
Next
Next
a = FreeFile
c = ThisWorkbook.Path & "\a"
Do
If Dir(c & ".txt") = "" Then Exit Do
c = c & "a"
Loop
Open c & ".txt" For Binary As #a
Put #a, 1, b
Close #a
End Sub

Sub nyuuryoku()
Dim a, b(99, 99) As Byte, c, d, e
a = FreeFile
c = Application.GetOpenFilename
If c = "False" Then Exit Sub
Open c For Binary As #a
Get #a, 1, b
Close #a
Application.ScreenUpdating = False
For d = 0 To 99
For e = 0 To 99
Cells(d + 1, e + 1) = b(d, e)
Next
Next
Application.ScreenUpdating = True
End Sub


これの範囲とかを変えてFormulaとか条件文をいい感じに使えばうまくいくとおも

【66120】Re:軽量化VBA
回答  metabeaux  - 10/8/2(月) 15:57 -

引用なし
パスワード
   数式⇒値、
空欄行・列を削除

だけですが、こんなのはどうでしょう?

Sub test()
  With ActiveSheet.UsedRange
    Dim r As Long, c As Long

    .Value = .Value
    
    r = .Rows.Count
    Do Until r = 0
      If WorksheetFunction.CountA(.Rows(r)) = 0 Then .Rows(r).Delete
      r = r - 1
    Loop
  
    c = .Columns.Count
    Do Until c = 0
      If WorksheetFunction.CountA(.Columns(c)) = 0 Then .Columns(c).Delete
      c = c - 1
    Loop
  End With
End Sub

2761 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free