トップページtech
1001コメント371KB

Excel VBA 質問スレ Part14

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2010/01/06(水) 12:34:58
過去スレ
01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
0981デフォルトの名無しさん2010/04/13(火) 23:48:58
ありません
0982デフォルトの名無しさん2010/04/14(水) 00:07:20
>>980
プログラムで処理する場合は、エクセルの保護を受けられません。
プログラマが自分で履歴機能を作る必要があります。

例えば、不可視のシートを用意しておいて、
消去ボタンクリック時にセルの内容をそのシートにコピーしてからClearContentsし、
戻すボタンでコピーした内容を書き戻す、など。
0983デフォルトの名無しさん2010/04/14(水) 00:35:06
>>981 >>982
さっそく、ありがとうございました。
大変よくわかりました。
別シートへの待避と復元をやってみます。
どうもありがとうございました。
0984デフォルトの名無しさん2010/04/14(水) 01:01:18
>>979
とりあえず、マクロの先頭に

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
ActiveWindow.DisplayGridlines = False
Application.DisplayPasteOptions = False
Application.DisplayInsertOptions = False
Application.AutoRecover.Enabled = False
Application.ErrorCheckingOptions.BackgroundChecking = False

マクロの最後に

Application.Calculation = xlCalculationAutomatic
ActiveWindow.DisplayGridlines = True
Application.DisplayPasteOptions = True
Application.DisplayInsertOptions = True
Application.AutoRecover.Enabled = True
Application.ErrorCheckingOptions.BackgroundChecking = True

というのを付け足してみ。もしかしたらちょっと速くなるかもよ。
0985デフォルトの名無しさん2010/04/14(水) 01:09:27
>>980
そのマクロをこんなふうに書き換えて、
Sub 範囲消去()
  Range("A1:D10").Select
  SendKeys ("{DEL}")
End Sub

マクロのオプションでショートカットキーを定義してから使うようにすれば、Ctrl+Zで元に戻せるようになるよ。
0986デフォルトの名無しさん2010/04/14(水) 01:27:18
>>985
>Ctrl+Zで元に戻せるようになるよ。
えっ、ホントですか? ありがとうございます。早速明日やってみます。ありがとうございます。

僕も不便に思っていましたが、まわりでやっている人のことを思うと、
ぜひ何とかしてあげたいと思っていました。

うまくいくと、みなさんに喜んでもらえそうです。
どうもありがとうございました。
09879712010/04/14(水) 03:15:49
>>984
チョットどころか途中で鈍行する事無1m5sで完了しました。奇跡です。
一番上は当然として、ワークシート関数をセルに記載するのが大量にあるコードだったのでApplication.Calculation = xlCalculationManualが効いたみたいです。
ちなみに下5つの奴は全部つけても1sしか短縮出来ませんでしたw

皆様ありがとうございました。
0988デフォルトの名無しさん2010/04/14(水) 16:56:02
すみません、教えてください。XP SP3, office2000です。

各関数が参照したい変数を、Publicで初期値付き宣言したいのですが、
うまくできません。記述の方法をご存じでしたら、教えてください。

やりたいことは、

   Public Dim Const hoge(5) As Integer = { 1, 5, 9, 6, 4 }

もちろん上の記述はめちゃくちゃなので、通りませんが、意味合いとしては、
・Constのhogeという整数の変数を、配列で5個確保して、
・初期値として右のような順番で数値を代入したい。
・しかも それら全部を1行で書きたい。
です。
宜しくお願いします
0989デフォルトの名無しさん2010/04/14(水) 17:22:42
>>988
1行でも何行でも、Constで配列を宣言するのは無理
0990デフォルトの名無しさん2010/04/14(水) 19:19:55
できないよ
1行で書きたい理由がわかんないけど、似たようなのが数十行あって…とかであれば、
Public Const HOGE As String = "1,2,3,4,5"
と宣言、使うときは
Split(HOGE)(0)

これじゃ文字列型配列になっちゃうから、Array関数とかも使えるかも
0991デフォルトの名無しさん2010/04/14(水) 19:50:55
定数を大量に用意したいなら、作業用のワークシートにデータを並べてロックしておくという手もある
09929882010/04/14(水) 20:53:30
みなさん、どうもありがとうございました。よくわかりました。
C言語だと、初期値付きの宣言ができるので、同じようにやってみたところ
エラーばっかり出るので、質問しました。
VBAの作法がわかっていないので、変な質問ですみませんでした。また教えてください。

Public hoge(256) As String として宣言して、
Private Sub Workbook_Open()の中で、代入することにします。
しかしPrivate Sub Workbook_Open()だと、Excelを落として起動して、落として起動して
を繰り返さなければならないので、デバッグに時間がかかります。トホホ

ありがとうございました。
0993デフォルトの名無しさん2010/04/14(水) 21:00:21
Private Sub Workbook_Openの中身を晒しな
0994デフォルトの名無しさん2010/04/14(水) 21:01:53
Excel VBA でもこういうのは作れますか?


ニコニコだけど、テトリス一時間の作者が
BrainF*ckのインタプリタを作ってる動画
http://www.nicovideo.jp/watch/sm10384056
0995デフォルトの名無しさん2010/04/14(水) 21:24:21
動画見てないけど、作れないわけない
0996デフォルトの名無しさん2010/04/14(水) 22:14:52
>>992
ならクラスでやってみたらどうかな?
適当だけどこんな感じで

' クラスモジュール Class1
Private m_Hoge As Variant

Public Sub Class_Initialize()
    m_Hoge = Array(1, 5, 9, 6, 4)
End Sub

Public Property Get Hoge(idx As Integer)
    Hoge = m_Hoge(idx)
End Property

' 標準モジュール Module1
Sub main()
    Dim fuga
    Set fuga = New Class1
    MsgBox fuga.Hoge(3)
End Sub
0997デフォルトの名無しさん2010/04/14(水) 22:23:11
>>994
チューリングマシン、要するに今出回ってる全てのPCやソフトは絶対に実現できる
CPU・メモリをエミュレートすればいいだけだからな。
ただしものすごく遅い(Pen4・オンボで最新のネトゲやるような感じ)という条件が加わる
ついでに言うとその質問のレベルだと実現は不可能だ。諦めとけ
0998デフォルトの名無しさん2010/04/14(水) 22:49:20
そうですか
安心しました
0999デフォルトの名無しさん2010/04/14(水) 22:50:15
そりゃできるわな
1000デフォルトの名無しさん2010/04/14(水) 22:50:56
うめ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。