1 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 04:56:43 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1228372971/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
357 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:30:13 ] オートシェイプをスプライトに見立てて作ったゲームってのも あってもよさそうだが見たことがない。 みんなワークシートにドット絵を描きたがるのはなんでだろう。
358 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:54:34 ] >>357 座標関係じゃね?セル位置のほうが初心者には直感的。 もしくは、オブジェのNewとか、オブジェクトの一意のID指定がメンドイとか。 個人的には、VBAで2Dゲームは初心者に向いてると思う。 描画の基礎は勉強できるでしょ。
359 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:06:52 ] >>352 スレチだが言語によると思うぞ。俺はVC/JAVA屋でC#に四苦八苦。 さらにDirectXなんかは思想の理解にてこずるし。 まあ、言語というよりはフレームワークの問題だが・・・ あと、半月くらいVB系触らないと構文殆ど忘れるしw
360 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:53:36 ] >>354 アラン・ケイの本に、セルを使って棒グラフを表現する例が載っていたから、 画期的なアイデアと言うほどではないな。
361 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:30:03 ] すいません。次のことをしたいのですが、簡単だと思ったのですが、 出来なく困っています。 最初にB列の任意のセルを一つ選び、 その選んだB列のセルに、常にR24のセルをコピーし 貼り付けたいのですが、色々やりましたが出来ません。 例えば、 セルB28を選び、マクロを実行したらR24をコピーし同じくB28に貼り付ける。 セルB30を選び、マクロを実行したらR24をコピーし同じくB30に貼り付ける。 セルB77を選び、マクロを実行したらR24をコピーし同じくB77に貼り付ける。 たったこれだけのことですが、このマクロの部分が相対参照にしても出来ません。 識者の方宜しくお願い致します。 なお EXCEL;ver2000 OS:win2000 VBA;多少使えます。 宜しくお願い致します。
362 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:43:12 ] ActiveCell = Range("R24") > VBA;多少使えます。 それはないだろ…
363 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:55:31 ] lol
364 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:58:01 ] デフォルトプロパティを省くな
365 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:58:10 ] >>362 有難うございます。しかし調べ、いろいろ試し下記のコードを作成したのですが・・・ ActiveCell = Range("R24").Copy ActiveCell.Offset(30, -2).Range("A1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False End Sub ↑出来ませんでした。R24だと手間が掛かってしまうと思うので、 任意のB列のセルにセルA1の値をコピーし貼り付ける。 という例で結構ですからコードをお願いできないでしょうか? 例えば、 セルB5を選び、マクロを実行したらA1をコピーし同じくB5に貼り付ける。 たったこれだけで良いです。宜しくお願い致します。
366 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 11:45:26 ] cell(2,5).value = cell(1,1).value cell(2,5).interior.colorindex = RGB(255,255,255) こんな感じだった気がする
367 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:16:38 ] >>366 cell → cells colorindex → color
368 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:34:13 ] セル情報全部コピーしたいって前提なら、↓で良いと思うがね。 Sub test() Cells(1, 1).Copy ActiveCell End Sub
369 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:39:14 ] 「R24だと手間」があったからValueにしてみた 色は関係ないのか。斜め読みスマソ
370 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:27:59 ] >>365 VBAがまったくわかってないようなんで、ヒントじゃなくて完成したマクロを書いといてやる。 Sub Macro1() ActiveCell = Range("R24") End Sub
371 名前:365 mailto:sage [2009/03/22(日) 17:16:18 ] 皆様本当に有難うございます。 只今仕事からかえってきました。んでまた仕事ですorz。 報告は後ほどさせて頂きます。
372 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:25:56 ] >>370 プロパティを省略するな。と何回言わせるのだ・・・。
373 名前:デフォルトの名無しさん [2009/03/22(日) 21:30:20 ] openのメソッドを勉強中ですが、 「updatelinks」引数の説明の中で、 「リモート参照」と「外部参照」という2つの言葉が出てきました。 「リモート参照」「外部参照」とはどういう意味ですか? ググってみても出てきませんでした (T_T;)。
374 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:19:52 ] >>372 ケチつけてるヒマがあったら正解を示せ。と何回言わせるのだ・・・。
375 名前:デフォルトの名無しさん [2009/03/22(日) 22:54:11 ] Sub test() selection.value=range("A1").value End sub A1の値を今選択しているセルの値に
376 名前:デフォルトの名無しさん [2009/03/22(日) 23:03:17 ] ↑あ、説明間違った。 今選択しているセルにA1の値を入れると。 ちなみにこの場合はActivecellよりselectionの方がいいと思うよ。
377 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:08:07 ] >>374 え、付けるべきプロパティが解らないの? コードが根本的に間違っていると言ってるわけじゃないのに それでも「正解を示せ」と言うからには、それくらいしか思いつかない…
378 名前:365 mailto:sage [2009/03/22(日) 23:33:25 ] 365です。 あれから>>370 さんのコードをそのまま頂いたら、 出来ました!!! >>370 さん本当に感謝です。 コードまでそのまま書いてくださり大変助かりました。 しかしこんな簡単なコードで出来るとは、 拍子抜けです。 勉強不足を感じました(汗。感謝。 >>366 さん >>368 さん わざわざ有難うございます。 どうやら私の説明が悪く、 何をしたいのか正確に伝えれなかったみたいです。 アドバイスいただきましたが、 それとはちょっと違いました。 ですが親切に本当に有難うございました。 ではお騒がせしました(ぺこり
379 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:34:11 ] >>378 >>362
380 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:01:22 ] おれが即座に>>362 でレスしたのはスルーだったわけだ
381 名前:365 mailto:sage [2009/03/23(月) 00:07:42 ] >>380 いえ、>>365 の最初 ActiveCell = Range("R24").Copy で使わせてもらいました。 >>362 さん=>>370 さん だと思っていたのですが・・・。 最初に回答を頂いていたようで有難うございます。 しかし、これは「ヒント」だと思ったので、 >>365 のような長居コードになってしまいました。
382 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:08:34 ] >>377 なんか本気で自覚がなさそうだから親切に教えてあげるけど、 デフォルトのプロパティがどうとか正解が知りたいんじゃなくて 「煽りがウザイ」って遠回しに言ってるんだと思うぞ。 プログラマーの精神年齢が低いのは世界共通の現象らしく、 とある海外のプログラミングの入門書にも 「まず大人になれ」みたいに書いてあって吹いたわ。
383 名前:デフォルトの名無しさん [2009/03/23(月) 00:10:19 ] プロパティの重要度も分かってない奴が適当な回答して悦に浸るのは間違ってる。 >>365 ではコピペしようと試みてるのに、destination使ってコピしてる>>368 のコードは違うと言いきってるし。 どういうこっちゃ。 だいたいから、なんで .value を省略する馬鹿が多いんだ? プロパティ省略なんて百害あって一利無しだ。 可読性もひったくれもあったもんじゃない。
384 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:04 ] なんでマジになってるの?
385 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:07 ] まあ今の時点でValueやらTextやら書いてもどうせ意味分からんだろうし 省略してることで壁に当たったとき、もう一度勉強しなおせばいいさ
386 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:36 ] プロパティの呼び方も分かってない奴がプログラマーとか笑わせるなよw マジで。
387 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:12:03 ] > 百害あって一利無しだ。 コードが短くなるという利があるでしょ
388 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:12:21 ] 皮肉や嫌みが通じないのは、目の前のコードを100%文法通りに解釈する訓練を受けた弊害だな
389 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:13:28 ] プロパティは知らなくても俺には関係ないが、それなら copyメソッドを勧めるべきだろ。
390 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:14:10 ] >>387 横から突っ込むけど それって利点なのか?w 必要なことを表現してない短縮って百害あ(ry・・・以下ループ
391 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:15:53 ] 古いバージョンのVBAだとRange( )よりRange( ).Valueのがかなり高速だったんだけど、 今のバージョンでは差が出ないんだよな。 当のMSもデフォルトプロパティの省略は推奨してないんだけど、言うことを聞かない 日曜プログラマが多いから仕様を変更したんかな。
392 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:19:44 ] 一般論として、変に省略すると、うっかり複数のセルが選択された状態でマクロを呼んだら エラーになったり関係ない周囲のセルを書き換えたりすることがあるから もうちょっと丁寧にコーディングした方がいいと思う。
393 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:19:50 ] 右辺を省略すると誤作動起こす可能性があるぞ。
394 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 16:22:07 ] xp 2003のADODB.Streamに関する質問です shift-jisで読み込んだファイルをutf-8に変換して バイナリモードにして.Wirteした後にさらにバイナリデータを追記したいのですが .Write bytData .Write chr(10) とすると'実行時エラー3001'になってしまいます。 どうかご教示よろしくお願いいたします。 With SecondObj .Position = 0 .Type = adTypeBinary .Position = 3 '先頭から削除する文字数 bytData = .read .Write bytData .Write 追加したい文字列 .SaveToFile saveFile, adSaveCreateOverWrite .Close End With
395 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 16:42:29 ] Write バイト配列
396 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 17:40:17 ] すいません。 シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、 定期的に全て削除したいのですが、 VBAでやりたいと思います。 調べたのですが分かりませんでした。 識者の方、ご教授お願い致します。 なおexcel=2000 OS=2000 でう。宜しくお願い致します。
397 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 18:51:22 ] どう調べて、どこが分からなかったのか? まずはそれをそっとささやいて欲しい
398 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:20:12 ] >>397 すいませんでした。 ネットと手持ちの本で調べたのですがのっていません。 自分でやったら、 数式 データ 書式設定 これらは削除できるのですが、 プリントスクリーンの画像だけは残ってしまいます。
399 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:59:21 ] >>398 なんかシートごと消した方がいいような感じの発言ですね でも一応 For Each shp In ActiveSheet.Shapes shp.Delete Next shp でアクティブなシートのシェイプが全部消えるよ
400 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:18:54 ] >>399 有難うございます!!! 今やったら出来ました。 大感激です!!!!! 本当に有難うございました!
401 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:44:09 ] >シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、 >定期的に全て削除したいのですが、 興味本位だけどどういう使い方してんの?
402 名前:デフォルトの名無しさん [2009/03/23(月) 23:54:03 ] すみません初歩的な質問なんですが オートフィルタで抽出した可視セルの値を配列変数に代入したのですが うまくいきません。 Sub test() Dim atai() As Variant Dim gyo() As intger Sheets(1).Range("A1").AutoFilter 3, ">0" ReDim atai(0), gyo(0) atai(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Value gyo(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Count Sheets(2).Range("A2", "A" & gyo(0)).Value = atai(0) End Sub 上記のコードではうまく配列に値を代入できません。 どなたかご教授願います。
403 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:32:50 ] >>402 おかしな部分が多すぎて、どこから教えたらいいのか… 自分で考えながら作るのもいいけど、まずはマクロの記録やってみ? 無駄がないように手順を良く考えてから、余計なキーを押さないよう、 余計な場所をクリックしないよう、慎重に操作しながら記録してみて、 それでもできあがったマクロは無駄が多いから、 それを自分で修正していくのがいいと思う。
404 名前:デフォルトの名無しさん [2009/03/24(火) 00:50:11 ] ↑自動記録でどうやって配列変数に値を代入するの?
405 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:22:04 ] >>401 株です。 ライトカッターって言うソフトで下部のチャートを切り取って、 それで明日の作戦を立てるのですが、 一週間もすると莫大なページを消費してなにが何だかになるので、 今回のVBAが必要になりました。
406 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:25:55 ] オートフィルタに1件もひっかからなかった場合を考慮してないから注意な Sub test() Dim atai() As Variant Dim gyo As Long Dim i As Long Dim R As Range Sheets(1).Activate Range("A1").AutoFilter Field:=1, Criteria1:=">0" Set R = Range("A2", Range("A" & Rows().Count).End(xlUp)) gyo = R.SpecialCells(xlCellTypeVisible).Count ReDim atai(gyo - 1) i = 0 For Each C In R.SpecialCells(xlCellTypeVisible) atai(i) = C.Value i = i + 1 Next R.Copy Destination:=Sheets(2).Range("A1") End Sub
407 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:31:26 ] >>404 少なくとも最初のエラーはマクロの記録で解決するはず 自分で直せる部分は自力でやらせる方針なんで
408 名前:デフォルトの名無しさん [2009/03/24(火) 02:08:30 ] 質問です。 エクセル2003を使ってグラフの散布図作成するマクロを作っているのですが データの範囲に変数使用する方法が分かりません。 マクロの記録で Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("J4") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3" ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1" ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" これを作成したあと、グラフの読み込む範囲が今300なのに対して ここの300を変数に格納した数値を利用して変化させたいのです。 ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3" ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1" ここにどのように変数を絡めたらいいのでしょうか。 変数には、行の一番最後を記録しています。 宜しくお願いします。
409 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:16:47 ] >>408 gyou = 300 ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R" & gyou & "C3" ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R" & gyou & "C1" とか
410 名前:408 [2009/03/24(火) 02:24:39 ] >>409 ありがとうございます。 その&の前後の半角スペースが必須なのですね…。 そのやり方を試していたんですが、やっと解決しました。 本当に助かりました!!!
411 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:31:21 ] スペースの有無で&記号の意味が変わるのってVBの最大の欠点だよな。 誰でも一度ははまったことあるはず。
412 名前:デフォルトの名無しさん [2009/03/24(火) 07:47:15 ] c言語より後にできたくせにc言語より駄目な言語ばっかりで凹むよね
413 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:25:05 ] VBSのRegExpをユーザー定義関数としてADDIN化するとか、 Excelの機能自体を拡張出来るスクリプトとしては優秀だな。 ワークシート関数で、リアルタイムで正規表現使えるのは便利だYo! 使ってる人多いから、ADDIN、ADDONもネットで簡単に拾えるし楽ちん。
414 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:39:13 ] 質問です。 forをつかってstr(i)に繰り返しデータを入れるようにして、 複数のボタンのキャプションを設定したいと考えてます。 bt1、bt2、bt3…と一部の数字だけ違うのですが、 上手くループで処理する方法はありますでしょうか。
415 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:50:13 ] >>414 Controls
416 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:15:32 ] ありがとうございます! 後、追加で知りたいんですが、 空のセルをstring型に取り込むと、空のままだと思うんですが、 それをcase文で判定するには、nullや””じゃうまくいきません。 セルが空の時は何かまた違う値が入るんでしょか?
417 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:58:00 ] セルの初期値はEmpty(定数:vbEmpty)だけど、Emptyなら「Case ""」にマッチするはずだし String型変数にEmptyを代入するとNullStringに変換されるので、尚更「Case ""」で問題ない。 因みにNullString(定数:vbNullString)は""と同義ね。 「Case ""」にマッチしないなら、セルが空ではない可能性が高いと思う。 Debug.Print Len(変数) 若しくは Debug.Print Len(セル) で、0になるか確認してみそ。0じゃなかったら空セルじゃないってこった。
418 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:38:31 ] >>417 ありがとうございます。 一応、msgboxで確認してました。 今よくよく考えたら、""ではなく、" "にしちゃってたかも知れないです^^; もうアドバイスを踏まえ、もう一度試してみます!
419 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:57:58 ] ちょっと色々やってみたんですが、controlsを使うものがうまくいきません。。。 Controls("CommandButton" & "i").Caption = "test" というのを、ソースに直接書いても動かないんでしょうか? Me. Controls("CommandButton" & "i").Caption = "test" にしても動きません。 ネットで探してみても、Moduleに書け的な事もありますが、 Public Sub chg(ByVal i As Integer) End Sub の間に書いて、callしても動きません。 どこがいけないでしょうか?
420 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:08:18 ] 変数「 i 」が「 1 」だとして Controls("CommandButton" & "i") だと、ボタン名は CommandButtoni だぞ。 CommandButton1 なら Controls("CommandButton" & "i") ではなく Controls("CommandButton" & i) だ。 こういうのもMsgBoxやDebug.Printで MsgBox "CommandButton" & "i" などを確認すればすぐに解ることなので、そういう問題起きたら 動かねーって騒ぐ前に初歩的な確認を行う癖を付けようぜ。
421 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:42:12 ] すいません。 書き間違えました。 ソースはしっかりiのみで、””で囲んではないです;;
422 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:54:11 ] Me. Controls ↑このスペースはNGだ。 これも書き間違いなら Me.CommandButton1.Caption = "test" が動くか試せ。
423 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:59:19 ] ソースはコピペしろ 書き間違いがなくなるし早いだろ
424 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:28:58 ] すいません。セルを選択して、選択したところから左側のセルに、 「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。 該当部分のコードは なのですが、そうしたら、時刻しか現れず、日付が出ません。 あれこれやって見て分かったのですが、 時刻と日付の順序を反対にすると ActiveCell.Offset(0, -13).Range("A1").Select Selection.Value = Date ActiveCell.Offset(0, -14).Range("A1").Select Selection.Value = Time こうすると、日付は出るものの、今度は時刻が現れません。 色々試行錯誤をしたのですが、なぜか分からず困っています。 識者の方、何卒ご教授お願い致します。 なお、 excel:2000 OS;win2000です。 宜しくお願い致します。
425 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:33:11 ] >>424 セルの書式
426 名前:424 mailto:sage [2009/03/26(木) 09:33:52 ] >>424 です。コードが一部抜けてました。>>424 は破棄し、 丸々訂正させてください。丸々1から書き直すと下記になります。 すいません。セルを選択して、選択したところから左側のセルに、 「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。 該当部分のコードは ActiveCell.Offset(0, -14).Range("A1").Select Selection.Value = Time ActiveCell.Offset(0, -13).Range("A1").Select Selection.Value = Date なのですが、そうしたら、時刻しか現れず、日付が出ません。 あれこれやって見て分かったのですが、 コードの時刻と日付の順序を反対にすると ActiveCell.Offset(0, -13).Range("A1").Select Selection.Value = Date ActiveCell.Offset(0, -14).Range("A1").Select Selection.Value = Time こうすると、日付は出るものの、今度は時刻が現れません。 色々試行錯誤をしたのですが、なぜか分からず困っています。 識者の方、何卒ご教授お願い致します。 なお、 excel:2000 OS;win2000です。 宜しくお願い致します。
427 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:45:43 ] あのさ、そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか? 間違っても日付と時刻が隣同士にはならないぞ。 とりあえずエスパーすると ActiveCell.Offset(0, -14).Range("A1").Value = Time ActiveCell.Offset(0, -13).Range("A1").Value = Date で良いんじゃないかと思うのだが。
428 名前:424 mailto:sage [2009/03/26(木) 09:58:12 ] >>427 有難うございます!!!あっけなく出来ました。 感謝です。 しかし、 >そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか? これは分かってますが、 >間違っても日付と時刻が隣同士にはならないぞ。 え?これがなぜだかサッパリ分かりません。 少なくとも隣り合うと思うのですが。 >>426 でも (0,-14)(0,-13) と位置を指定したのですから、-14の次の数字は-13ですから、 少なくとも隣り合うと思っていたのですが。。。 一応本は読みました。 私のコードのどこがいけないのか、 もう少しご指摘願えないでしょうか。
429 名前:424 mailto:sage [2009/03/26(木) 09:59:37 ] >>425 有難うございます。しかしそれではなかったです。
430 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:00:21 ] offsetで - の値を使うときは用心すべし。 どうしても使うならば、 if activecell.columns < 13 then を挟むとかしてエラー回避しないと、何ともお粗末になってしまうよ。
431 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:04:17 ] if activecell.columns < 13 then ↓ if activecell.column < 13 then に訂正。 >>429 ActiveCell.Offset(0, -13).Range("A1").Select Selection.Value = Date ActiveCell.Offset(0, -14).Range("A1").Select Selection.Value = Time activecell.column が100で開始したとき、 offset(0,-13) で、87 を "select" してるでしょ。 んで、次に offset(0,-14) を "select” してるから、73に書かれる。 select したら activecellの場所変わるでそ。
432 名前:424 mailto:sage [2009/03/26(木) 10:14:10 ] >>430 >>431 431さんご親切に有難うございます。 >select したら activecellの場所変わるでそ。 そういうことか!!!と思いました。 ご指摘頂きやっと意味が分かりました。 >>431 のご説明は、間違えたコードの下にメモとしてコーピーさせて頂きます。 勉強不足を感じました。 本当に有難うございました。
433 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:39:51 ] Controls("CommandButton" & i)でもやはり動きません… subかfunctionがないと言われます。 またMeなどつけてもオブジェクトがおかしいと言われます。 何か宣言しないといけないとかありますか?
434 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:50:32 ] >>433 Controlsはフォーム上のコンポーネントにしか使えない。 ワークシートに貼り付けたボタンの場合はControlsじゃなくて Worksheets("Sheet1").OLEObjects("CommandButton" & i).Object.Caption = "test"
435 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:40:44 ] >>433 >>414 ではコマンドボタンのオブジェクト名が bt1、bt2…だけど、実際のオブジェクト名は?
436 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:47:13 ] エラーメッセージが「Sub または Function が定義されていません。」なら >>434 で正解の可能性が高い。 質問するときはエラーメッセージを1文字も間違えずにそのまま書くのが基本だよ。 たとえ意味が通じても、勝手に略しちゃだめ。悪い例→「subかfunctionがない」 それにメッセージをそのまま検索すればたいてい解決方法が見つかる。
437 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:11:47 ] 質問です。 ブックオープン時に、publicのstringに セルを読み込んでいます。 最初のうちはうまい事その中身を使えるんですが、 ずっとブックを開いたままにしていると、 気が付いたら変数の中身が変わってるのか、 消えるのか分かりませんが、最初の状態ではなくなってしまいます。 変数に値を入れたものを ずっと保持しておく事はできないんでしょうか?
438 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:18:40 ] >>434 >>436 ありがとうございます! ご教授頂いた記述でうまくいきました。 >>435 携帯から書き込んでいて面倒だったので省きましたが、実際は普通にCommandButton1です。
439 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 02:34:06 ] >>437 Option Explicitは書いてある?
440 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 07:44:28 ] >>439 書いてないです。 それを書けば延々保持され続けるんでしょうか?
441 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 09:00:01 ] モジュールレベル変数の値は ・任意に代入、初期化 ・モジュール内編集 しない限りは保持される。 誤って気付かない内に初期化するコードを書いてる可能性が無いのに不意に初期化されてるなら、 「モジュール内編集」に因るものの可能性が高い。 「モジュール内編集」とは、モジュールレベルの宣言部(Public xxx As Stringとか書いてるところ) を書き替えるとか、新しいプロシージャを作成・削除するとか(既存のプロシージャ内の編集は非該当) デザインモードを使用するとかね。 「モジュール内編集」を行ったらモジュールレベル変数が初期化されるのは当然のことでそれはどうしようも無い。
442 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 12:41:21 ] まぁ、それ以外にも初期化されることがあるんだけどな
443 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:16:52 ] 例えば?
444 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:52:32 ] [VBA] Public 宣言された変数の有効期間 support.microsoft.com/kb/408871/ja
445 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:56:29 ] あー、そのページで、「モジュール内編集」以外が何なのか明記しておいた方がいいか。 ・プロジェクトの構造の変更 ・コンパイルエラーの発生 ・コントロールを削除して [元に戻す] を実行する ちなみに、そのほかにも初期化されることが経験上あった。 いずれにせよ「何もしてないつもりでも、変数が初期化されることはありうる」という前提で プログラミングすべきで、意図しない初期化が困る場合は、シートに値を保存するなどを しておく必要がある。
446 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:58:27 ] あー、さらに追加。 「そのほかにも」の内容は、「なにもしてないつもり」だったので、何なのかは具体的にはわからない。
447 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 15:29:13 ] へー
448 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:23:21 ] >>437 static
449 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:01:14 ] staticでも無力ですがな
450 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:38:26 ] モジュールレベルの変数が初期化されるとき つまりモジュールが初期化されるときは モジュールレベルのプロシージャも初期化され プロシージャレベルで保持されるStatic変数も プロシージャの初期化に伴い当然初期化される
451 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:23:02 ] ななめ読みしてレスで悪いんだけど、非表示シートに書き込んでおけば?
452 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:06:03 ] すいません。 もし選択したセルがA1であれば、B1の値を7にする。 というのは何とかできました。 If ActiveCell = Range("A1") Then Range("B1").Value = 7 End If これと似たように もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。 というのが出来ず困っています。一応下記のようにしましたが If ActiveCell = Range("A1:A10") Then Range("B1").Value = 7 End If どうしても出来ません。 もし出来なければ、 「選択したセルがA列のいずれかであればB1の値を7にする。」 ということでも良いのですが。 識者の方お力をかしていただけないでしょうか。 宜しくお願い致します。 なおexcel:ver2000 OS:win2000になります。 宜しくお願い致します。
453 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:34:27 ] If ActiveCell.Column = "1" Then
454 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:45:24 ] >>453 有難うございます! 今日はもう遅いので、明日試させていただき、 追って報告します。
455 名前:452 mailto:sage [2009/03/28(土) 02:53:18 ] すいません。列のいずれか、というのを教えていただき本当に助かります。 感謝してます。 しかし出来れば、 「もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。」 というケースも分かれば嬉しいなと思います。、 どなたか教えていただければ助かります。
456 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 03:16:16 ] If Not Intersect(ActiveCell, Range("A1:A10")) Is Nothing Then Range("B7").Value = 7 End If
457 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:00:11 ] ここは質問スレだがおまえの宿題手伝いスレじゃねーぞ んなクソ簡単な命令くらい自分で調べて作れアホ
458 名前:452 mailto:sage [2009/03/28(土) 13:39:05 ] >>453 有難うございます!出来ました!助かりました。 >>456 有難うございます! 出来ました。 お二人に助けていただき、エラーを防ぐプログラムが出来るようになりました。 本当に感謝します。 >>457 勘違いしてます。私は既に自分で調べて、試行錯誤して、 それでも分からなかったのでここで聞いてます。 >んなクソ簡単な命令くらい自分で調べて作れアホ クソ簡単って。。。 自分まだVBA初めて10日ぐらいなんですよ。 あなたにとってはそんな簡単なこと、でも私にとっては チンプンカンプンで難しいことが一杯あるんですよ。 でもなんとか自分で試行錯誤してるうちに、 これでも最初に比べれば飛躍的に自分で対処できるようになったんですよ。
459 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:54:26 ] >>458 > 自分まだVBA初めて10日ぐらいなんですよ。 >>361 > VBA;多少使えます。 > VBA;多少使えます。 > VBA;多少使えます。 ふ〜ん
460 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:57:14 ] >>1 > ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み > コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 > ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 お前のやってることはまるで教えてクンだ
461 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:10:19 ] まあ俺の顔に免じてゆるしてやれよ
462 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:33:27 ] >>457 心のちーせーやろーだなぁw
463 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 18:34:21 ] 亀レスだけど・・・。 >>437 シートに保持させるのが嫌なら、レジストリに放り込んでおくとか、 CGIでインターネットに変数保管しておくのはどう?
464 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:22:59 ] >>463 >CGIでインターネットに変数保管しておくのはどう? ネットにつながらない環境の時とか接続に失敗したらどうするのさ
465 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:41:40 ] それが問題になるなら、それを選択しなければ良いだけじゃね?
466 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:32:23 ] bookopenのイベントでレジストリキー書き換えが強固だな。
467 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:08:18 ] 437です。 レジストリに値をってのはやり方は全くわかりませんが、 その動作や処理自体特に問題のないものなんでしょうか?
468 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:20:46 ] WSHでレジストリに変更加える訳でも無ければ、 ExcelVBAから触れるレジストリ領域は一か所だけだね。 VBAで触れる部分をどんだけ滅茶苦茶にしても問題は無いと思うけど。 個人的には、レジストリやINIの肥大化が嫌いなんで、 きちんと管理出来ないなら使わない方が良いかも。と思うよ。 レジストリエディタでVBAを介さずに値の削除、書き込みが出来ない内はお勧めしないよ。 今回の状況だと、素直にワークシートに値を書き込んでおくのが良いんじゃないかな。
469 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:21:36 ] ExcelVBAのビルドイン関数って意味ね。
470 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:02:17 ] >>468 ありがとうございます。 もう少し色々調べたいと思います。
471 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:14:12 ] 初歩的な質問ですみません。マクロの記録で操作記録されないようでお手上げです。 OS ビスタ Excel2007使用です。 スピンボタンの設定で LINKEDCELL = TARGET.ADDRESS という部分をその左隣のセル指定に変更したく色々やりました。 稚拙な質問ですみません。よろしくお願いします。
472 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:55:25 ] 特定のフォルダに「品番」.jpg A1〜A10に「品番」の羅列 B1〜B10に「品番」.jpgを自動的にセルのサイズに合わせて貼り付け(もし該当するファイルがなければunknown.jpg A列の品番が変わると自動的に差し替え 現在は A列にフルパスで参照したい画像のファイル名 挿入の数だけ下記のマクロ作ってやってます Range("A2").Select ActiveSheet.Pictures.Insert(Cells(1, 1)).Select OSはXP エクセルは2003です 宜しくお願い致します
473 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:44:24 ] 丸投げ感たっぷりだなぁ
474 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:33:18 ] すいません 最初考えた時はできなくて現在の妥協案になりまして やっぱりもう一度やり直そうと考えたんですが、やっぱり挫折・・・ 正直、丸投げしました
475 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:59:32 ] >>472 ChangeイベントでTargetやTargetからの相対位置を対象とすれば良し これで解らなければ、諦めるか、この程度は理解できるレベルまで自分で勉強しろ
476 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:07:04 ] shell関数について質問です。 アプリケーションをwinword.exeを指定した時、 空白を含むパスのファイルが開けません。 C:\test 1\test.txtだと、 file:///test%201/test.txtと記述しないとうまくいきません。 セルからパスを読み込ませ開きたいのですが、 うまく開く方法はないでしょうか?
477 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:13:47 ] >>476 """C:\test 1\test.txt""" セルに「C:\test 1\test.txt」と入っているなら """" & Range().Value & """"
478 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:23:54 ] >>477 ありがとうございます。 今は外にいるのでまた明日試したいと思いますが、 ご教授頂いた記述はどういった意味になるんでしょうか?
479 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:33:33 ] >>478 ここは初心者スレじゃない 基礎的な構文規則くらい自分で調べろ
480 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:06:18 ] 初心者スレなんてないんだから、初心者の質問でもいいだろ。 まぁ俺は答える気ゼロなんだがなw
481 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:15:01 ] プログラム起動時のパラメータはスペースで分割される。 スペース入りのパスを渡す場合には、分割されないようダブルコーテーションで囲む必要がある。 ダブルコーテーションの中にダブルコーテーションを書く場合場、""と書く。 以上をあわせると、 """abc def""" """" & range.value & """" の意味がわかるはず。
482 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:15:55 ] 質問スレだろ? 変な研究とかの丸投げじゃなきゃ質問に答えてやれよ どーせ分からないだけだろ
483 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:22:22 ] >>482 偉そうなこと言ってる暇があるならお前が教えてやればいい それとも質問者本人が煽ってるだけなのかな?
484 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:22:58 ] これわからない奴なんてほとんどいないだろw
485 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:26:30 ] >>483 そんなくだらん煽りなんかしないで、お前が答えてやれよ。
486 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:27:15 ] 丸投げでも良いじゃない。人間だもの。
487 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:41:46 ] いや、俺にはわからん。 A2なのに(1, 1)になる理由とか、、、 >>484 はわかるのか。すごいなあ。
488 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:49:44 ] >>481 ご親切にありがとうございます。
489 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:50:44 ] >>487 わかんねーなら黙っとけ糞が
490 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:53:50 ] ExcelVBA覚えるのにおススメの本ありませんか? 当方のレベルは、超簡単なシェルスクリプトぐらいなら作りますが VBAの文法とか構造がさっぱりわからなくて初学者向けから勉強したいと思ってます。
491 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:59:25 ] Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!
492 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:05:29 ] 本屋に行って手に取ってみるぐらいの労力惜しむなよ…
493 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:11:58 ] >>492 書評ってなんで必要だと思う?
494 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:13:09 ] 大村あつしの入門書っぽいの選んどけ
495 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:22:34 ] うちのばあちゃんが、人の悪口ってのはコンプレックスの裏返しだって言ってた。 つまり>>489 自己紹介乙
496 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:24:28 ] >>493 (1) 書評欄を埋めるため (2) 評論家がゼニをふんだくるため
497 名前:490 mailto:sage [2009/03/30(月) 23:46:29 ] ありがとうございます >>491 よさそうですね。見てみます。エロゲみたいなタイトルですが >>492 >>494 実はすでに大村あつしの入門書を見たんですが最初は簡単だったのにいきなりむずかしくなって 自分には合わないなって思いました。 ほかたくさんあったんですがイマイチピンとこずここで聞きました。
498 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:52:18 ] >>493 書評は別に必要ではないだろ
499 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:56:12 ] できる大辞典 Excel VBA がオススメ 大村あつしは知識はあるが根本的にバカなので こいつの書いた本は素人にはオススメしない バカな内容に引きずられないだけの基礎スキルを持っていて 知識だけ上乗せしたい中級者以降なら構わないが
500 名前:472 mailto:sage [2009/03/31(火) 00:04:55 ] ヒントありがとうございます。助かります。 別のイベントで指定すれば良いんですね。やってみます。
501 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:57:31 ] (^p^)あうあうあー
502 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:13:54 ] >>475 changeイベントなんて1文字打ち込むごとに…
503 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:22:15 ] …は発生しない 確定された時にのみ発生する あとは変更確定されたセルが、目的のセル範囲かで条件分岐して処理すれば良いだけ
504 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:02:57 ] 1文字打ち込むごとにchangeイベントが発生するのはComboBoxやTextBoxなどだな
505 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:04:59 ] >>499 著者は誰?
506 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 15:10:37 ] Excel-VBAでXMLデータを引っ張ってるのですが -------------------------------------------------------------- NGパターン Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0") xmlHttp.Open "POST", "https://192.168.1.1:8080/xml/", False xmlHttp.Send xmlData -------------------------------------------------------------- -------------------------------------------------------------- OKパターン Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0") xmlHttp.Open "GET", "https://192.168.1.1:8080/xml/", False xmlHttp.Send xmlData -証明書確認画面が出る。(主導ではいを選択)- Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0") xmlHttp.Open "POST", "https://192.168.1.1:8080/xml/", False xmlHttp.Send xmlData -------------------------------------------------------------- POSTでリクエストを出すとエラーが返ります。 GETでサーバ証明書を取得後にPOSTを続けるとエラーが出ないので、証明書関連だと おもってるのですが、オレオレ証明書でも無視して続行する方法を 教えて頂けないでしょうか。
507 名前:デフォルトの名無しさん [2009/04/01(水) 01:57:32 ] >>506 ぐぐれ
508 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:26:40 ] XPのExcel2007です。 次の流れのプログラムを作成しました。 1.テキストファイルを読み込み 2.不要データの削除 3.作表(列の追加など) 4.罫線・セルの色付け プログラム自体は稼働し、結果も希望通りのものができました。 しかし、一度実行した後にもう一度実行すると、初回時に比べて処理時間がかかります。 マクロの最初と最後に、画面更新の停止と解除(screenupdating)も追加してみたのですが、改善にいたりませんでした。 一度ファイルを終了し、再度開きなおした場合の初回はやはり処理は早いです。 そういった現象を回避できる手掛かりを探しています。 ご助言をいただけましたら幸いです。
509 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:28:50 ] 再実行の前に、初回の実行したときのデータをすべて削除してるか?
510 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:37:54 ] >>509 ありがとうございます。 データの削除は最初に行っています。 (Cells.Delete Shift:=xlUp) 使用しているシートは2つ。(2つとも削除しています) 1.テキストファイルを読み込むシートと読み込んだ後に、 2.別シートにすべてコピーしてから、不要データの削除や罫線処理を行っています。 何度か確認したところ、別シートにコピーしてからの処理が重くなるようです。
511 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 16:34:06 ] >>507 証明書を入れて回避する方法は探せたけど 認証を無視する方法がみつからない。(回避じゃダメなので) ぐぐって見つかるサイトがあるならURLを教えてください。
512 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 16:36:58 ] >>510 とりあえずブックうp 外部に出せないデータとかは、適当な文字列と置き換えていいから
513 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:08:14 ] >>508 ,510です。 ファイルあげてみました。よろしくお願いします。 ttp://uproda.2ch-library.com/lib116394.xls.shtml DLパスは変更なしです。 外に出せないコードは削除してあります。 しかし一回目早く、2回目以降が遅いという現象はおきます。 何分手探りでVBAやっているため、コードが見づらいと思います。 (基本マクロ記録からいじくっているのが多いです) よろしくご教授ください。
514 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:11:57 ] >>513 ですが、一回削除してからうpしなおしました。 ttp://uproda.2ch-library.com/lib116395.xls.shtml パス変更なしです。 お願いします。
515 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:20:32 ] >>513-514 です。 たびたび本当に申し訳ありません。 うまくあがってなかたったので、再度あげました。 ttp://uproda.2ch-library.com/lib116397.xls.shtml お願いします。
516 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:29:06 ] 事務所名でてるから早く消せ
517 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:32:07 ] >>516 最後にあげたのは全部消したはずなので、大丈夫だと思います。
518 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:45:18 ] >>517 マクロの中に
519 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:06:53 ] ありがとうございます。 先程削除しました。 今後はあげるのやめときます。 お騒がせしてすいませんでした。
520 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:55:05 ] 諦めるって事か お疲れさまでした
521 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:33:11 ] >>510 >データの削除は最初に行っています。 これは、マクロの中でやってるのか? 再実行する前に手で全部削除(コピー残すんじゃなくて)して再実行してみてどうだ 考えられる可能性は、コピーを残すことによりデータ量が増えて遅くなってるとか 空シートのクリアは早いがデータの多いシートのクリアは遅いとか まあ、まずマクロのどこ(どの命令)が遅いか確認したら?
522 名前:非508 mailto:sage [2009/04/01(水) 20:12:53 ] 落としたやつを動かしてみたが、枠線とか背景色とかをいじってる所が遅くなるようだ。 セルでなくシートを削除して、新しいシートで実行すると速度が変わらないので、Excelの仕様の問題かと。 シートの中に何か覚えている部分があるんだろう。
523 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:40:12 ] >>521 、522 ありがとうございました。 その後、メモリの消去の命令とかいろいろ追加してみましたが、やっぱり駄目でした。 仕様ということであきらめてみます。 お見苦しいところを、多々お見せして、申しわけありませんでした。
524 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:45:51 ] >>523 upし続けてくれる? 直ぐ消すと 見てくれる人も見てくれないよ
525 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:01:17 ] 開放する命令を出さないとダメだぞ。
526 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:36:17 ] open ?
527 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:45:48 ] 初心者なんですが質問をさせてください。 ワークシートのセルに関数を入れて 4(=index(〜)とかで4になったもの) n = ↑のセル range("a1")=n とかにするとa1には=index(〜)がそのままはいってしまって。 値(この場合4)にしたいんだがどうすればいいか教えてください。説明が下手で申し訳ありません。
528 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:59:19 ] 自己解決しました。 マクロの記録でコピペして値のみでできました。 もし他にも方法があったら教えてください。
529 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 02:06:10 ] ここって日本の掲示板だよな? あまりにも日本語の質問が少ないんで 何処か日本以外の国の掲示板に迷い込んだのかと錯覚する…
530 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:30:14 ] 自然言語がちょっと乱れた程度で外国語と間違えそうになるなんてすごいです。 尊敬します。先生と呼ばせてください。 ところで先生は文末に約物だけを付けるのは正しい日本語とみなす派なんですね。
531 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:34:51 ] どうしたの?
532 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 07:05:43 ] 自分で不自由て自覚あるみたいだから好きに呼ばせておけばいいよ
533 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 19:57:19 ] 4(=index(〜)とかで4になったもの) もうね。メタ文字が入ってると、どんなパターンなのか考えてしまってダメだわ。
534 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:52:17 ] 日本語でOK
535 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:28:15 ] >>527-528 だいたい俺んとこじゃそういうふうにならないんだが。 仮にC1に=INDEX(D:D,4)となってて n=Range("C1") Range("A1")=n と.Valueを省略して書いてもA1には値が入るぞ?
536 名前:デフォルトの名無しさん [2009/04/04(土) 16:16:24 ] かつてoffice2003で作ったxlsファイルでVBAを組んだのですが それをoffice2007のxlsxで開こうとするとエラーになってしまいます。 もちろん保存するときにxlsで保存すれば開けるのですが。 xlsで作ったVBAはあくまでもxlsファイルでしか開けなく 互換性はないのでしょうか?
537 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:55:47 ] >>536 マクロ付きの場合、xlsxではなくxlsmになる。 名前を付けて保存のダイアログのファイルの種類のところから、それ選べ。
538 名前:デフォルトの名無しさん [2009/04/05(日) 09:46:08 ] ボタンが一個置いてあり、その下に、数字がはいった二つのセル(仮にセルA、セルBとする)がある。 で、ボタンを押すと、別シートの表の中からセルAと一致 するセルをもつ行のうち最初にみつかったセルの1マス右側のセルにセルBの内容を書き込む・・・ というようなことをVBAでやりたいのですが、 単純化したサンプルでいいんでどういうコードになるか教えていただけませんか
539 名前:デフォルトの名無しさん [2009/04/05(日) 10:28:13 ] オートシェイプにMouseMoveとかのイベントはありませんか? オートシェイプ上にカーソルが移動すると オートシェイプに合わせたデータを表示する というのプログラムを組みたいのですが
540 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:32:32 ] >>538 With Sheet2 .Range(.Cells(1, 1), .Cells(10, 1)).Find(what:=Sheet1.Cells(1, 1)).Offset(0, 1) = Sheet1.Cells(2, 1) End With Sheet2が別シート、Sheet1がボタンがあるシートな。
541 名前:デフォルトの名無しさん [2009/04/05(日) 11:04:03 ] >>540 ありがとうございました。 ちなみにセルAとセルBじゃなくて、 列Aと列Bだったとして、 列Aの内容と一致するデータを別シートから検索し、右隣のセルに列Bの 内容を書き込む、みたいな場合はどうなるんでしょうか
542 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:11:31 ] 丸投げよくない
543 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:48:36 ] >>539 シェイプ系には無い ActiveXオブジェクトには有る 矩形で良いならコントロールツールのイメージオブジェクト使うのが手っ取り早い 凝った形が良いならActiveXオブジェクト作って取り込めば良い
544 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 12:38:49 ] >>539 無い。けど、マウス座標からObject位置判定を自前でやれば同じことはできる できたとしても、定義済みシェイプを使う方法が面倒だと思う シェイプと情報をうまく自動リンクさせる手法の方が難しいと思われ
545 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:58:18 ] デフォルトプロパティって書くべきなんだよな?
546 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:59:21 ] 関数だと必ず()にして表記したほうがわかりやすいよな 仕事としての意味で
547 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:25:50 ] >>451 非表示シートって表示できるの? 矛盾した質問で申し訳ない
548 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:16:03 ] セルの値を二元配列に組み込みたいのですが、 簡単にする方法はありますか? data(0, 0) = A1.value data(0, 1) = A2.value data(1, 0) = B1.value data(1, 1) = B2.value data(1, 2) = B3.value のように一度に格納したいのです
549 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:21:55 ] >>547 出来ない理由でも?
550 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:05:28 ] >>548 Dim ary As Variant ary = Range(Cells(1, 1), Cells(3, 3)).Value これで配列に入る。 添え字は1始まり。
551 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:11:28 ] >>550 ありがとうございます
552 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:01:28 ] >>549 拾ってきたソースで非表示シートに値を入れてるのがあって それを目で追うために見えるようにしたかったんだよ
553 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:11:41 ] 表示できない場合、うっかり非表示にしちゃったときどうするんだ
554 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:16:02 ] >>545 保守的には書いたほうが良い。書くべき。 けど、VB6に限れば書かない方が速度が速い。もしかしたらVBAも・・・? まあ、所詮Excelなんで筋違いか。2008は知らん。
555 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:26:50 ] どこぞのサイトに書く場合と書かない場合の計測結果があったな
556 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:06:51 ] 書いた方がわずかに早いけど、そこまでスピードにこだわる処理にVBAは向いてない気が
557 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:43:34 ] 質問です。 Variantに複数のRangeを代入した際の動きって どこかにドキュメントとかありますか? いまいちアレが配列になる理由がわからない。
558 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:57:49 ] >>557 どゆこと?
559 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:06:05 ] それは代入以前の問題だろ 君は複数範囲のRangeオブジェクトのValueプロパティが、配列を返すってことを理解してないだけじゃん。 変数は単にValueプロパティが返した値をそのまま保持しているだけで、Variant型変数に代入したときに 何か変換とかが行われてるわけじゃないし。
560 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:09:38 ] >>557 variantでメモリを確保します 最低16バイトです そこに配列の値を入れていきます。増えたらVariantが確保してるメモリ量も増大します 終わり 多分可変長ってところでひっかかてるんじゃないかな
561 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:51:12 ] >>558 ,560 複数のRangeといったのは、下記のような代入です。 Dim var as Variant var = [A1:B3] なんでvarに配列が入るのか不思議だったので聞きました。 (普通に先頭要素の値が文字列として入ると思っていたから) >>559 うーん、そういうExcelのCOMの作り方であって、 別にVBA的な何かというわけではないのですね。 デフォルトプロパティの動作についてドキュメントないのかな。 CVarでも動作同じなのかな。
562 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:53:46 ] つまり勘違いしてただけか
563 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:32:03 ] Range型に不用意にVariantを使用しない。後で意味が分からなくなる。 デフォルト云々の前に、Variantは不定形型ということを理解すべき。
564 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:38:54 ] range == stringの認識も改めたほうがよさそだね
565 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:45:48 ] >>563 なにいってんの?ばか?
566 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:46:10 ] >>564 を見てふと思ったんだけど、 やっぱり比較演算子と代入演算子が同じってのは分かりにくいよね。 >>563 ユーザー定義関数なんかで、セル指定or文字 を引数で使うみたいに、 明確にvariantじゃなきゃ条件分岐がしっかり出来ないって用途は限定されるしね。 まぁ、そんな目的だとしてもTypenameあたりでしっかりと何型が入ったかを判定させるべきだと思う。 入れっぱなし、とりあえず問題なく動くからOK。って作り方はわしゃ好まん。
567 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:10:16 ] VBAでカレーライスって作れますか?
568 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:12:10 ] >>567 外部マイコンをVBAで制御すればできる もちろん、マイコンでカレーライスが作れるように設定しておいてくれ
569 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:27:07 ] だがそれは、はたしてVBAで作ったことになるのだろうか?
570 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:41:36 ] 『パソコンはC言語で動いてる』の考え方次第じゃない? 目に見える結果にプログラミング言語は限定されないと思う しいて言うなら、カレーライス製造装置の制御ソフトの大半がVBAなら、VBAで出来てるといえるのでは? 最悪、かーちゃんにメールするだけでも成立しそうだが 激しくスレチ乙
571 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:44:00 ] なるよ
572 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 01:05:33 ] 「パソコンで年賀状作った」 「それはプリンタに作らせただけだろう」 みたいな話か
573 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 06:53:16 ] 最後にちょっと国内で加工すれば国産になるのと同じ道理ですな
574 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:04:10 ] >>563 は何か勘違いしてるの? セルの値の配列をいっぺんに入れるならVariant型しかないじゃん。
575 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:38:27 ] Range.Value()の代入先がVariant()型に限るってのもVBAの妙な仕様の一つだよな。 別にDouble()やString()を許容してくれてもよさそうに思えるのに。
576 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:02:15 ] プロパティの定義が Value As Variant なんだから、妙でもなんでもなく当然だろ? というか、配列じゃないときに変換関数も通さず別型の変数に代入できてしまう方が妙だ。 自動型変換なんてのは行われないのが普通だからね。 VB6以前やVBAにどっぷりハマっていると、自動型変換されるのが当然で、プロパティの戻り値を プロパティの型とは別型の変数に代入できないという当たり前のことが不自然に感じてしまうものなのか?
577 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:22:28 ] ならばセルに数値が入ってる時TypeName(Range("A1").Value)ってやると Doubleが返ってくるのをやめてほしい。 Range("A1").ValueTypeみたいなデータ型を調べるプロパティを用意すべき。
578 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:39:47 ] >>577 オブジェクト指向を一から勉強し直せ
579 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:40:13 ] >>577 それはTypeNameが内部型を返すという仕様通りの結果だろ? 結局全てに置いて理解が浅いだけの話じゃん。 そして問題点を指摘しているのではなく、「俺の妄想通りに動かない」とブー垂れてるだけ。 ホント、どうしようもないな。
580 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:53:11 ] じゃあ問題なのは一部の演算子で自動的に型変換が行われてしまうってこと? VBAだと暗黙の型変換を禁止する方法ってないよね?
581 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:55:04 ] >>580 何いってんの?馬鹿なの?
582 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:11:21 ] >>580 それ、結構重要だと思うわ 最近のスクリプト言語でも思う 勝手に型変換して書いたソースをなんとか動く形に解釈してしまうのは 俺もダメだわ
583 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:20:39 ] 単純な変数への代入だと勝手に型変換してくれるのに 配列への代入だと型変換してくれない。 なんで統一してくれないの?
584 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:22:08 ] VBAは中途半端に型があるからなぁ VBSみたいに、もう型なんてバリアント以外禁止!にすればよかったんだよ 実行環境が勝手に型変換するのは、勝手に型変換するコードを書くからなんだがな それは問題なんじゃなくて、そういう言語だと理解して使うしかない
585 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:25:23 ] >>577 それって意味あるの? ValueTypeプロパティがあったとして、 VarType/TypeNameが廃止なら、現状のVarType/TypeNameと何も変わりない。 見た目が変わるだけ。 一方、VarType/TypeNameが存在するとしたら、そっちは何をするんだ? 例えば、Variantであるという戻り値なら、そんなものソースコードを見れば自明だ。 ほかの方法は思いつかない。まさかValueTypeと同じとは言わないだろうし。
586 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:30:16 ] 「variantの使い方は気をつけよう」でおk? 初心者はよく勉強すること 熟練者は的確なスレをすること 反論だけのキチガイはスルーすること
587 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:33:36 ] スレをする?
588 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:40:27 ] Variantはまだいい方。 一番わかりにくいのはRangeオブジェクトだと思う。 よく使われることを想定したためか、かなりの省略が許容されているおかげで誤解も多い。
589 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:46:17 ] 別に解りにくいなんて思ったことは無いけどな 理解度が低かった初心者の頃以外は
590 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:59:16 ] EntireRowとかのRow自体のRangeとか、 結合セル時のOffsetとか、Find・FindNextとかはわかりづらいと思った。
591 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:10:04 ] 理論的な思考が出来る人なら問題にはならないけどね 結局は個人の問題
592 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:15:09 ] んなアホな
593 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:24:04 ] まあ出来ないうちはそう思うのは仕方ない 解ってみれば単純な物だが
594 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:26:06 ] うゎ、こいつうぜ
595 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:31:57 ] ここはヒトの理解というものについて考察するスレじゃないというのは、 論 理 的な思考が出来る人なら問題にはならないけどね。
596 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:36:17 ] 悔しかったの?
597 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:39:06 ] Cellsの使い方がおかしい奴は多いねぇ。 Set r = Range("a1:b5") r.Cells(2,1).hogehoge なんてやつ見るとアフォかと。
598 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:40:46 ] なにやってんのそれ?w
599 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:49:29 ] やってることはどうでもRange("a1:b5") がセルの集合だからCellsを使うのはおかしいってこと。
600 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:58:52 ] >>599 ただの相対参照じゃねーの?
601 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:07:32 ] >>597 複数セルに対するCellsで第二引数まで指定するのは確かにおかしいが やってる奴は滅多に見ないぞ 複数セルに対するCellsで第一引数のみの指定や 単一セルに対するCellsで第二引数まで指定するのならよく見るが、これらはちゃんと意味有るし 前者は範囲内、若しくは範囲の延長上で右下方向に何番目のセルという指定で Range("A1:E5").Cells(12)なら、A1:E5の5行5列範囲で右下方向12番目ということで 1 2 3 4 5 6 7 8 9 10 11 12 のような感じで3行2列目のB3を返す 後者はOffsetの初期インデックス違いのようなもので、Offsetが0始まりなのに対して、Cellsが1始まり Debug.Print Range("A1").Cells(3, 3).Address(0, 0) Debug.Print Range("A1").Offset(2, 2).Address(0, 0) 因みに前者のような使い方があるので、「(親が)セルの集合だからCellsを使うのはおかしい」って言い方は不適切だな
602 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:35:18 ] 問題は、RangeもCellsもRangeオブジェクトを返すのに、その明確な 使い分けができてないことだろ
603 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:40:10 ] 使ってればそのうち使い分けられるようになるさ。
604 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:54:34 ] いや、たしかに自然と使い分けてるんだが、 問題としては、使い分けの方法ってか、指針を説明できないってことなんだ 今だから白状するが、俺は初心者の頃は、Cellsは単一セルそのものを返してると思ってた まあ、だからRangeとCellsの使い分けはあんまり悩まなかったが、かといって 範囲が1×1のレンジ操作はCells使えってのも、なんかちょっと違う気がする
605 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 09:06:00 ] >>597 がおかしいのは r.Cells(2,1).hogehoge じゃなくて rItem(2,1).hogehogeとかr(2,1).hogehogeって書けって意味だよ。 r.Cells(2,1).hogehoge ってr.Cells.Item(2,1).hogehoge の意味だけどセルの集合にわざわざ再度Cellsを使うのは無駄ってもんだ。 例えばCells(2,1)もCells.Cells.Cells(2,1)も同じセルををさすが、動けばいいってもんじゃねーからな。 EntireRowとかのセルの集合じゃないものにCellsを使うのは意味があるが>>597 ではCellsは無意味だね
606 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 09:19:44 ] r.Cells(2,1).hogehogeがr.Cells.[_Default](2,1).hogehogeの意味だって突っ込みは無しよ。
607 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:41:21 ] >>605 デフォルトプロパティを省略するなって議論が上の方にあったな だが実際問題、Cells.Item(2,1)なんて書かないなぁ デフォルトプロパティがインデクサとして作用するなら普通みんな書かないんじゃない まあ、そのせいで、Cells(2,1)はプロパティ取得じゃなくて、 Cellsというメソッドを2と1という引数で呼び出してると勘違いしてる時期があった VBAの入門書とか、そのへんちゃんと解説してるようなのはほとんどないと思う ちゃんとしたコード読まないと、ちゃんとしたコードかけるようにならないってことだな ただ、Range.RangeとかCells.Cellsとかは感覚的におかしいと思うんだが Range.Cellsは感覚的におかしいと思わないんだよなぁ
608 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:12:17 ] >>607 Excel95の頃はCellsはメソッドじゃなかった? 中身は実質変わってないのかな?
609 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:27:47 ] ソース見てRangeがオブジェクトかプロパティかわからない俺参上 Range("A1") = "abc" たとえばこれはオブジェクトでデフォルトプロパティのValueが省略、でいいの?
610 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:52:48 ] Rangeはオブジェクトを返すプロパティだよ
611 名前:デフォルトの名無しさん [2009/04/07(火) 17:35:05 ] EXCEL2003です セルの書式設定の[表示形式]定義が[文字列]かどうか 判断する方法を教えて下さい。 やりたい事は「日付を表すデータ」([表示形式]が[日付]とは限らない)が 元々どのように入力されているか判断したいのです。 具体的には、 文字列で「3/1」、「2009/3」「2009/3/1」と入力されて いるのか、日付データで「2009/3」等と入力されているのかの 判断方法は、どうすれば良いかということです。 よろしくお願い致します。
612 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 17:40:30 ] >>611 NumberFormatLocal
613 名前:デフォルトの名無しさん [2009/04/07(火) 22:14:32 ] 文字列で"0.1"とか"1"をDoubleに変換したいです。 且つ、"abc"のようなものなら失敗して欲しいです。 CDbl()でよいと思うのですが、"abc"などを渡した場合どのように失敗を通知してくれるのでしょうか? 例外などですか?このときの例外の補足の仕方を教えていただけますか? 宜しくおねがいします
614 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:24:36 ] On Error GoTo xxxx でエラートラップ Err.Numberでエラーの種類しらべてしかるべき処理 はっきりいってVBAのエラー処理はおまけみたいなもんだ 変換してエラーでる可能性があるとわかってるなら、 変換する前に変換元が数字かどうかぐらい自分でチェックするほうがいいと思うぞ
615 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:34:04 ] >>614 それは他の言語とどこが違うの?
616 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:41:15 ] >>614 ありがとうございます。m(_ _)m アドバイス助かります。自分でエラーチェックすべきか、 オブジェクトの例外スローに期待すべきかも悩んでました。 とりあえず試してみます。 例外が送出され、それを捕らえて上手くメッセージが出せたらそれに越したことはないものですから。。
617 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:42:55 ] >>615 エラー処理ルーチンにうつった場合の、それ以降の処理が非常にややこしくなるんだ まあ、詳しくは構造化エラー処理あたりでぐぐってみてくれ で、613はJava系のプログラマか? VBAで例外スロー、キャッチとか考えんほうがいいぞw
618 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:50:08 ] つーか、IsNumericじゃダメなの?
619 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 06:07:31 ] IsNumericかregexを使う
620 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:11:12 ] vbのエラー処理ってこんなかんじだったかな 1: on error resume next (処理) if err.number = xxx then 〜 end if on error goto 0 2: on error goto eh (処理) exit sub/function eh: (errで分岐したり処理したりする。resume next で戻ることも出来るが、大体はそのままプロシージャを抜ける。)
621 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:15:33 ] 負の日付を判断する関数ってあります? もしくは負の日付か判断する方法があったら教えてください isDate(負の日付)や変数 = 負の日付とかするだけでエラーに飛んでしまって・・・
622 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:07:38 ] まず、負の日付の定義についておしえてくれ
623 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:45:02 ] 1899/12/29以前ってことか? 俺のとこじゃDate型の変数にCdate("1872/8/13")を入れてMsgBox IsDate(変数)とすりゃTrueだけどな。 直にMsgBox IsDate(-10000)だとFalseだが。 エラーにはならんな。
624 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:07:01 ] >>622-623 説明不足でもうしわけないです 表示形式が「日付」のセルに、例えば9999999999って値を打つと ####と表示され、マウスカーソルをあてると「負の日付または時間は####と表示されます。」 と出てきまして、そこの値をvbaの方で参照しようとして落ちているという状況です (日付型のとこには0〜2958465以外の数値だと日付シリアル対象外でこうなるようで・・・) 関数があれば〜と言いましたが、代入するにしろ引数にするにしろ、 参照した時点で落ちてるので関数があっても意味がないと思い、 結局エラーに行かせた先で判断するようにしました どうもありがとうございました
625 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:19:05 ] >>624 Value2プロパティが2958465以下かで判断する方法もあるかもね。 ValueプロパティだとオーバーフローのエラーだがValue2だとオーバーフローしないから。
626 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:59:38 ] >>625 知らないプロパティだったんで早速調べてみたんですがこれで行けそうです! >>625 氏の言うとおりの方法で範囲外なら無効な日付とメッセージを出すようにしてみました 出来ればエラーに飛ばしたくないと考えていたので助かりました どうもありがとうございます!
627 名前:611 [2009/04/08(水) 17:37:10 ] >612 レスありがとうございます
628 名前:デフォルトの名無しさん [2009/04/09(木) 00:08:50 ] EXCELファイルがどのバージョン(EXCEL97、2000、2003)で 作成されたものか調べる方法を教えてくれ神ども。
629 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 05:48:16 ] 拡張子は?