Excel VBA質問スレ Part8
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/08/25(月) 23:16:33前スレ http://pc11.2ch.net/test/read.cgi/tech/1212587819/
★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)
0002デフォルトの名無しさん
2008/08/25(月) 23:18:5401 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/
0003デフォルトの名無しさん
2008/08/25(月) 23:28:51乙
0004デフォルトの名無しさん
2008/08/25(月) 23:31:24入力文字列の書式が「999-9999-9999」か「9999-99-9999」だけなら、
x = split(入力文字列,"-")
x(0)="(" & x(0) & ")"
debug.print join(x,"-")
0005デフォルトの名無しさん
2008/08/25(月) 23:32:460006デフォルトの名無しさん
2008/08/25(月) 23:51:55これだけコンパクトに洗練されたIDEってほかにないだろ?
しかもお手頃。Excelに最初からついてくるんだぜ。
そんでExcelからマクロの記録とかやれば馬鹿でもチョンでもコードがかけるの。
こんな素晴らしい機能は他に類をみないよね。
もうビルゲイツさまさまってかんじ?
ろくにシェルスクリプトもかけないのにわざわざLinuxとか使ってる奴もったいねーw
とりあえずビルゲイツさまが提供してくださるOSとソフトウェアを使っていればいいんだよ。
0007デフォルトの名無しさん
2008/08/26(火) 00:00:040008デフォルトの名無しさん
2008/08/26(火) 20:56:28ならんぞ。どういうパターンの話?
もしかして型変換起こしてるとか?
0009デフォルトの名無しさん
2008/08/26(火) 22:43:02です。
いろいろなことを教えていただきありがとうございます。
ひとつひとつやってみます。
またなにか聞くかもしれませんそのときはお願いいたします。
0010デフォルトの名無しさん
2008/08/27(水) 12:59:04関数も持たせたいのですが可能でしょうか?
0011デフォルトの名無しさん
2008/08/27(水) 13:56:150012デフォルトの名無しさん
2008/08/27(水) 15:18:29ちょっと調べてみます。
0013デフォルトの名無しさん
2008/08/27(水) 22:06:17並べて表示させるのはなんとなくわかるのですが、すべて削除するマクロがわかりません。
その列以外にもオートシェイプがあるのでDrawingObjects.Delete は使えないと思いますし、
マクロを記録しながら、オブジェクトの選択を選んで消したい箇所をドラッグしてDELしても
ActiveSheet.Shapes.Range(Array("AutoShape 260", "AutoShape 261")).Select
Selection.Delete
とオートシェイプの番号を指定して削除しているのでマクロには使えなさそうです。
マクロで使えるオートシェイプの削除方ってありませんか?
0014デフォルトの名無しさん
2008/08/27(水) 22:19:540015デフォルトの名無しさん
2008/08/27(水) 22:50:39もう少し詳しくお願いします。
0016デフォルトの名無しさん
2008/08/28(木) 00:40:08んで作成時にkeyプロパティに座標(行,列)を文字列で格納しておくんだ。
あとはActiveSheet内のシェイプを走査して、特定の座標のシェイプを指定
して削除できると思うよ。
ActiveSheetの行or列orセルが削除されたらシェイプのkeyプロパティに格納
されている座標を更新する処理を加えれば完璧じゃね?
0017デフォルトの名無しさん
2008/08/28(木) 20:54:48ExecuteExcel4macroでやると速いんですが、
書式が通常と全く異なるので記述が難しい。
順番が決まってるし、""で囲む部分とかどうやったら良いのやら。
誰か上手いこと解説して下さい。
0018デフォルトの名無しさん
2008/08/28(木) 22:37:59何度も同じ処理をcallする場合に、処理を記述するのは、
sub と function、どちらにすべきでしょうか。
引数無しの記述なので、どちらで記述して呼び出しても同じ結果が出るのですが、
正しい使い方を覚えたいと思います。
よろしくお願いします。
0019デフォルトの名無しさん
2008/08/28(木) 22:39:390020デフォルトの名無しさん
2008/08/28(木) 22:40:420021デフォルトの名無しさん
2008/08/29(金) 08:38:25Excel でコンマおよび引用符を区切り文字としてデータをテキスト ファイルにエクスポートするマクロ
http://support.microsoft.com/kb/123183/ja
上記のようなマクロを求めています。
例えばexcel上に、
1 2 3
4 5 6
という表があれば、
"1","2","3"
"4","5","6"
というテキストファイルに吐き出したいのです。
例では、囲い文字='"' 、 区切り文字=',' としましたが、両方とも簡単に変更出来るとなお良いです。
どなたかとっかかりでも良いですからアドバイスを下さい。よろしくお願いします。
0022デフォルトの名無しさん
2008/08/29(金) 08:43:20釣りじゃないなら、「名前をつけて保存」のcsvを飽きるほど試してみるんだ。
0023デフォルトの名無しさん
2008/08/29(金) 08:54:11回答ありがとうございます。
保存形式にcsvを選べばカンマ区切りのテキストファイルが得られるのは知っていますが、
それでは囲い文字までは指定できないと思います・・・。
それとも私の知らない機能があるのでしょうか?
0024デフォルトの名無しさん
2008/08/29(金) 09:33:100025デフォルトの名無しさん
2008/08/29(金) 10:27:01セルの書式を文字列に変更してcsv形式で保存しましたが、
""で括られることはありませんでした。ごめんなさい。
ちなみにセルの内容自体を"1"などとしてcsvで保存すると、
なぜか"が増えて"""1"""となってしまいます。
EXCELの機能のみで実現できるのならばそれにこしたことはないのですが、
色々調べた結果、これはマクロを組まなければ実現できないみたいなんです。
どうか、マクロを使った方法を教えていただけないでしょうか?
私の足りない頭では、まずベタにcsvで吐き出した後、
テキストエディタを使って正規表現で , や先頭を置換していく方法しか分かりません。
1ファイルだけならそんなに手間はかかりませんが、大量のファイルを処理したい場合、
マクロを使えたら便利だと思い質問させて頂いてます。
002624
2008/08/29(金) 10:46:51んじゃ、1を'1にしたらどう?
# つーか、理由が判らんから喰い付きが悪いんじゃないだろか。
0027デフォルトの名無しさん
2008/08/29(金) 11:30:21>んじゃ、1を'1にしたらどう?
書式を文字列にしたのと同じ結果で、""では括られませんでした。
># つーか、理由が判らんから喰い付きが悪いんじゃないだろか。
理由をお話ししますと。
仕事上、囲い文字付きのcsvファイルを良く扱うんです。
それはoracleデータベースから吐き出されたテキストデータなんですね。
"00","123","789"
"01","456","098"
上記のような形式のものです。
それを修正する時、テキストエディタで直接編集するのが難しい場合、
一旦excelに読み込ませてexcel上で編集するんです。
そのデータを再び上記のような形式に保存し、データベースに取り込むということをするんです。
その際、単にexcelでcsv形式で保存すると、囲い文字""が無くなってしまいます。
囲い文字""がないとうまくツールでデータベースにロード出来ないので困っているわけです。
単にただのcsvから囲い文字付きcsvに変換したいなら、
そのようなシェルスクリプトを作るなり、手動で置換するなり出来るのですが、
今回excelを使用しているので、マクロを使って自動化することに挑戦したいのです。
ヒントでもリンクでも構いません。とっかかりをどなたかご教示願います。
0028デフォルトの名無しさん
2008/08/29(金) 12:04:25ファイル保存のコードを流用しているみたいですけど、すべての値を'"'で囲んで、,'で連結してファイルに書き出すコードを書けばいいですよ
囲い文字や区切り文字は変数にしとくと変更も簡単にできます
会社として問題がないならファイルを経由せずに直接DBを更新するとよいかもしれません
「excel oo4o」とかでぐぐれば参考ページが出てきたと思います
0029デフォルトの名無しさん
2008/08/29(金) 12:55:59組込ダイアログボックスから操作することは可能でしょうか?
やりたいことは、
[書式]>[条件付き書式]で表示されるダイアログの
[書式(F)]ボタンをクリックしたときの動作を自作フォーム上で再現したいです。
よろしくお願いします
0030デフォルトの名無しさん
2008/08/29(金) 13:22:28予定表に書き込む事はできます
でしょうか。
予定をExcelでガーッと書いて、
ポチッとOutlookに流し込みたいです。
MS Exchange serverを使ってます。
VBAについては初心者で、
「Excel Outlook VBA 予定」等でググってみたのですが
見つける事ができず・・・
もしサンプルコードがあればそれをもとに勉強させていただきたいと思っています。
0031デフォルトの名無しさん
2008/08/29(金) 20:20:33Outlook20033はできない
0032デフォルトの名無しさん
2008/08/29(金) 21:38:52【1 OSの種類 .】 WindowsXP
【2 Excelのバージョン 】 Excel2003
【3 VBAが使えるか .】 多少
【4 VBAでの回答の可否】 可
【5 検索キーワード 】 シート作成 ファイル名 付与
原本となるブックがあり
それを元に
Book1
Book2
Book3
Book4
・・・
と任意の数だけブックを任意のフォルダに作成し
かつブック名に日付(8月1日、8月2日・・)と付けて作成する方法を
教えてください。
参考になりそうなサイトでも構わないです。
よろしくお願いします。
0033デフォルトの名無しさん
2008/08/29(金) 21:45:36あぁ!?そうなんですか!?
ほかのバージョンではできるんでしょうか?!
かいかえようかなぁ・・・
0035y
2008/08/29(金) 22:39:09「プロシージャ内で宣言したRange型変数の書式」とありますが、
宣言された時点でのRange型変数は、まだどこのセルを指すか
決まっていないため、書式を設定することはできません。
Range型変数に任意のセル範囲をSetした上で、そのセル範囲の
条件付書式の書式をVBAで設定する方法を、ということでしたら、
まずは条件付書式設定の作業を「マクロの記録」(>>1 ★6)を
使ってコード化し、「Selection」となっているところを任意のセル範囲
に対する操作になるよう書き換えてください。そうして出来上がった
コードを、自作フォーム上のコントロールのイベントプロシージャから
呼び出すようにすれば、自作フォームから操作できます。
始めに「組込ダイアログボックスから操作する」とあり、
後で「自作フォーム上で再現したい」とありますが、
組み込みダイアログボックスと自作フォームは別物です。
おそらく「自作フォーム」のつもりだと思いますが、
混同しないよう気をつけてください。
0036デフォルトの名無しさん
2008/08/29(金) 22:49:23マクロを記録して、やりたいことやってみろ
0037デフォルトの名無しさん
2008/08/29(金) 23:36:33そもそもOutlook20033なんてない。
0038デフォルトの名無しさん
2008/08/30(土) 19:44:370039y
2008/08/30(土) 21:14:32Excel20033の検索結果 8 件中 1 - 8 件目 (0.15 秒)
0040デフォルトの名無しさん
2008/08/30(土) 23:17:120041デフォルトの名無しさん
2008/08/31(日) 02:30:400042デフォルトの名無しさん
2008/08/31(日) 03:15:03【2 Excelのバージョン 】 Excel2000
【3 VBAが使えるか 】 皆無
【4 VBAでの回答の可否 】 可
【5 検索キーワード 】 VBA プログラム
現在VBAを勉強し始めたばかりなのですが、9/1までに提出しなければいけない問題があり困ってます。
丸投げとなってしまうのですが、もしよろしければお知恵をお貸しください;
EXCEL名:テンプレート Sheet名:[Sheet1][Sheet2]
CommandButton:[Cmd] 補足:三行目以降にデータが入っている。
ACCESS名:ユーザー テーブル名:T_TOUROKU
フィールド名:[No.][Name][Adr][Tel]
補足:データは数百件入っている。 SELECT文があるとまとめやすいようです。
VBAのDAOを使用して、テンプレ−ト上の[Cmd]ボタンを押すと、
@Sheet1のCell(B)列に書かれた内容と[Name]を比較、
A一致すれば次にCell(A)列と[No.]と比較し,変更のある箇所をSheet1の内容へと更新。
B見つからなければ、新規として追加する。
C又、変更があったものは[Sheet2]へコピーもする。
簡潔に言えば、
名前を主キーとして、EXCELの内容をACCESSへ書き込み・更新をして変更ログを
Sheet2へ書き込みたいのですが、自分の知識ではどのようにコーディングすればいいのか
全然判らないので、よろしくお願いします。。。
0043デフォルトの名無しさん
2008/08/31(日) 06:07:21>>1★5
「なつやすみのしゅくだい」はじぶんでやりましょう
0044デフォルトの名無しさん
2008/08/31(日) 07:18:590045デフォルトの名無しさん
2008/08/31(日) 08:56:12テキスト変更して再グループをして終了させたいのですが
これだとその都度グループ番号が変わっちゃって使えません><;
他にいい指定方法ありませんか?
ActiveSheet.Shapes("Group 526").Select
Selection.ShapeRange.Ungroup.Select
ActiveSheet.Shapes("Rectangle 101").Select
Selection.Characters.Text = "ほげ1"
ActiveSheet.Shapes("Rectangle 126").Select
Selection.Characters.Text = "ほげ2"
ActiveSheet.Shapes("Rectangle 127").Select
Selection.ShapeRange.Regroup.Select
Selection.Characters.Text = "ほげ3"
0046デフォルトの名無しさん
2008/08/31(日) 10:28:55http://www.amazon.co.jp/s/ref=nb_ss_gw?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Daps&field-keywords=Excel+access+
0047y
2008/08/31(日) 11:07:20という課題は荷が重すぎるような...。>>42の学校ではどういうカリキュラムでVBAを教えているのか
わかりませんが、最低限その課題を解くために必要な授業を受けるか、必要な説明が書かれた
テキストが配布されているなら、とにかくそれらを参考に自分で何かコードを書いて、
再度質問してみてください。
0048デフォルトの名無しさん
2008/08/31(日) 11:36:111日ぐぐって、サンプル試すだけでできるようなるっしょ。
0049デフォルトの名無しさん
2008/08/31(日) 11:43:56あんた優しいな。
経験皆無なわけないじゃん。
>>42が授業聞いてないだけだよ。
0050y
2008/08/31(日) 11:48:33GroupItemsプロパティから、そのグループに含まれているすべてのシェイプのコレクションを取得できます。
グループを解除する前に、その情報をCollection型変数にでも保管しておいて、
それぞれのテキストを書き換えた後、その情報をもとに再びグループ化すれば、グループ名を使わずに実現できます。
>>48, >>49
情報系の学生で、ちょっとでも他の言語の経験があれば何とかなるかも
あとは>>42の頑張り次第ですね。
0051デフォルトの名無しさん
2008/08/31(日) 12:28:05コードくれよ
0052デフォルトの名無しさん
2008/08/31(日) 12:32:00おまえのことをおもって、今後誰もレスをせんだろうな。
0053デフォルトの名無しさん
2008/08/31(日) 13:11:220054y
2008/08/31(日) 13:46:53それについて私も気になってました。>>16に書いてある方法を自分でも
調べていたんですが、シェイプに「keyプロパティ」ってあるんでしたっけ?
オブジェクトブラウザで探しても見つかりません。
005545
2008/08/31(日) 15:17:38複数のグループ化されたオートシェイプのうちの一つを指定するのに
ActiveSheet.Shapes("Group 526").Select のようにではなく、例えばRange("B5")の上に掛かってるグループを指定する、
というような方法はありますか?
シートもどんどん複写して使いますので名前やインデックスだと手に負えない気がします。
0056デフォルトの名無しさん
2008/08/31(日) 15:59:55役に立ちそうで立たないからな。
0057デフォルトの名無しさん
2008/08/31(日) 17:56:34それすらできないなら文句言うな
0058デフォルトの名無しさん
2008/08/31(日) 22:36:57>>54
keyプロパティはないけどidプロパティでシェイプを特定できるから、(id,座標)のような配列や
コレクションを用意しておいて座標<->シェイプの関連づけをすれば解決するんじゃないかな。
0059デフォルトの名無しさん
2008/09/01(月) 03:45:00TopLeftCell プロパティとか BottomRightCell プロパティを利用するのだと思います
0060デフォルトの名無しさん
2008/09/02(火) 00:34:420061デフォルトの名無しさん
2008/09/02(火) 00:49:54で、ユーザーフォームで「電話番号入力」欄を作り、そこに電話番号を入れて「検索」ボタンを押すと、
電話番号が一致した「顧客名」、「住所」を同じユーザーフォームに表示するようにしたいのですが、
どんなコードを使うと良いのかヒントを教えていただけませんか?
シートには、
A B C D
顧客名 電話番号 住所1 住所2
1 あいだ 090xxxxxxxxx 東京都 杉並区
2 いとう 080xxxxxxxx 北海道 札幌市
という風に記入しています
B1の電話番号「090xxxxxxxx」を「電話番号入力」欄に入れて「検索」ボタンを押すと
「顧客名」 あいだ
「住所1」 東京都
「住所2」 杉並区
という風に表示できるようにしたいのです。
Excelは、2000
OSは、Winddows XP SP3です
0062デフォルトの名無しさん
2008/09/02(火) 00:51:35「検索」ボタンを押すと該当するデータがない場合にメッセージが出るようにはしたのですが、
そこから先が(というか、ほとんど進んでいないのですが)見当がつきません
0063デフォルトの名無しさん
2008/09/02(火) 02:35:21あとはCellsでデータを取ればいい
0064デフォルトの名無しさん
2008/09/02(火) 18:47:07Chdrive ThisWorkbook.Path とやって作成した奴を
他人のPCで実行させても同じフォルダ内のファイルを探せなくてエラーが出ます。
デスクトップのフォルダで動作させても
msgbox ThisWorkbook.Pathでは〜¥Tempとなっています。
ユーザー設定のカレントは空白にしても変わりません。
XPの2003で作成し、会社の2007では動作しましたが他のPCのXP、2003で発生します。
どのように対処すべきですか?
0065デフォルトの名無しさん
2008/09/02(火) 20:52:52006664
2008/09/02(火) 22:13:35なぜ関係ないC:\〜¥〜¥Tempになってしまうのか?ってことです。
0067デフォルトの名無しさん
2008/09/02(火) 23:44:42OfficeXP・2003からOffice2007にアップグレードすればおk
0068デフォルトの名無しさん
2008/09/03(水) 19:41:38以下のコードで、実行時エラー1004「アプリケーション定義または
オブジェクト定義のエラーです」になります。
何が原因でしょうか。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim o16 As Integer
Dim o1 As Integer
Dim rgbnum As Integer
r = Target.Row
c = Target.Column
省略
rgbnum = o16 * 16 + o1
Range(Cells(r, c - 1), Cells(r, c - 1)).Value = rgbnum ←ここでエラー
End Sub
0069デフォルトの名無しさん
2008/09/03(水) 21:50:310070デフォルトの名無しさん
2008/09/03(水) 21:51:170071デフォルトの名無しさん
2008/09/03(水) 23:46:30いまいち理解しているのかどうかがわかりません。
勉強の仕方はネットで調べながら・・・なのですが、
みなさんはどのように勉強してましたか?
課題をもらえるとやりやすいのですが、一人でやってると自分が何をしているのか
わからなくなります。覚えるコツなどありましたら教えてください。
0072デフォルトの名無しさん
2008/09/03(水) 23:53:34興味あるものを作るところから始めたら?
仕事なら、覚えるしかないからかえってそういう事を悩まずにすむけど。
0073デフォルトの名無しさん
2008/09/03(水) 23:57:43おれはシューティングゲーム→ギャルゲー→RPGと作って
無駄な時間をすごした。
0074デフォルトの名無しさん
2008/09/04(木) 03:13:53VBは最初はいろんな小物ツールとかつくって覚えたなぁ。
0075デフォルトの名無しさん
2008/09/04(木) 03:29:37VBA全体を勉強したいならWin32APIやWindowsCOMオブジェクト
についても勉強する必要があると思うなぁ。
最初はコードが公開されているサンプルを眺めたり流用して何か
役に立つものを作ったらいいと思う。その内にコードが公開されて
いないけど実現したい機能とかも自力で作成できるようになるよ。
Officeだったらコードが公開されていなくてもパスワードクラックの
ツールがあるからそれ使ってちょっと高度なコードにも目を通すと
いいかも。
0076デフォルトの名無しさん
2008/09/04(木) 03:57:220077デフォルトの名無しさん
2008/09/04(木) 11:53:25質問掲示板の「回答者」になるのが良いでしょう。
どの掲示板が良いかは自分で判断して下さい。
別に書き込まなくても良いので、色々な方のコードと自分のコードを比較する事が勉強になる。
0078デフォルトの名無しさん
2008/09/04(木) 16:15:580079デフォルトの名無しさん
2008/09/04(木) 18:43:380080デフォルトの名無しさん
2008/09/04(木) 19:18:16分類的にはOO言語寄りではあるな
008168
2008/09/04(木) 19:49:36レスありがとうございます。
cはゼロにも1にもなっていないですが・・・。
0082デフォルトの名無しさん
2008/09/04(木) 20:41:230083デフォルトの名無しさん
2008/09/04(木) 20:45:170084デフォルトの名無しさん
2008/09/04(木) 21:56:37sheets(hoge).range(
の形でどうかな?
sheet changeイベントで、rangeオブジェクトが保持してるシート名が対象rangeと異なるからエラー出してるとか。
適当だけどw
0085デフォルトの名無しさん
2008/09/04(木) 22:23:24体系だった入門書を通読しろよ、糞ゆとりが
0086デフォルトの名無しさん
2008/09/04(木) 22:44:220087デフォルトの名無しさん
2008/09/04(木) 23:45:43cに1が入った場合の処理をしていないから
Changeイベントループして最終的に >>70の言う事になってるだけ
0088デフォルトの名無しさん
2008/09/05(金) 00:09:51という命令でA1:A5の範囲のセルを結合させたり結合解除させたいのですが、
実行させても何も起こりません。エラーすら起こりません。
ばらして同様のことをやるとちゃんと動きます。何が悪いのでしょうか。
以下そのコード
Sub toggling(ByRef obj As Variant)
obj = Not obj
End Sub
Sub toggleMerge(ByVal str$)
toggling Range(str).mergeCells
End Sub
0089デフォルトの名無しさん
2008/09/05(金) 00:35:04モジュールで有効な変数宣言しようとすると
Dimとか打ってたらエラーダイアログが0.2秒ぐらいで6連続くらい連発して打ち切れない
Excel2008なんだけど構文チェックスピード早すぎて打てない
どうしたらいいのか教えて頂けないでしょうか
0090デフォルトの名無しさん
2008/09/05(金) 00:46:23"c"にミスがないのであれば
Sheets(hoge).Range((Sheets(hoge).Cells(r, c - 1), Sheets(hoge).Cells(r, c - 1)).Value = rgbnum
↑のようにしてみてはいかがか
0091デフォルトの名無しさん
2008/09/05(金) 00:50:36http://namidame.2ch.net/test/read.cgi/slotj/1216400588/
のスレで確率についてバトルしています
問題はサイコロで1が8回連続して出る確率です
バカが多すぎて疲れました
頭の良い皆様、論破してください
お願いします
0092デフォルトの名無しさん
2008/09/05(金) 01:15:08Worksheet_Changeイベントに記述しているから
セルに値を入れる前にイベント発生を止める処理を入れるか
cが0にならないようにする処理を入れないと
Changeイベントが連鎖してエラーになる
0093デフォルトの名無しさん
2008/09/05(金) 01:20:01めっちゃ早く打つ
0094デフォルトの名無しさん
2008/09/05(金) 01:28:59でもさ、質問する前に日本語で質問できるようになってから来いよな。
たのむから。
0095デフォルトの名無しさん
2008/09/05(金) 02:00:19なるほど。ちょっと賢くなりました。
009668
2008/09/05(金) 08:57:53cが特定の値の時にしか、
セルに値を入れないようにしたら
うまくいきましたm(__)m
0097y
2008/09/05(金) 17:45:41おやっ、と思うようなコードですね。
たぶん、MergeCellsプロパティの「実体」を、togglingプロシージャに
参照渡しして、そこからプロパティを操作しようと考えたのでしょうか。
偶然かもしれませんが、なかなか珍しい間違い方をしていると思います。
toggling Range(str).MergeCells
というコードは、
@MergeCellsプロパティを読み出した結果得られた値について、
Aその値をtogglingプロシージャに渡す、
という2段階の処理として実行されます。単純に
「MergeCellsプロパティを、togglingプロシージャに渡す」
わけではありません。
Range(str).MergeCells で取得できるのは、プロパティの実体ではなく、
実体を読み出した結果であり、"True"もしくは"False"というただの値です。
この時点で、実体との関係は断たれてしまっているので、
その値をtogglingに参照渡しして、それを反転させても、
プロパティそのものを操作することにはなりません。
プロパティを操作する場合は、次のように直接操作するようにしてください。
Sub toggleMerge(ByVal str$)
Range(str).MergeCells = Not (Range(str).MergeCells)
End Sub
0098y
2008/09/05(金) 18:04:43何をした瞬間エラーメッセージが出た、というあたりをもう少し詳しく。>93w
>>58
ありがとうございます。やっぱりKeyプロパティはないんですね。
0099デフォルトの名無しさん
2008/09/05(金) 20:14:320100デフォルトの名無しさん
2008/09/05(金) 23:31:49どうもありがとうございます。
Boolean型のオブジェクトを渡していたからだったのですね。
でもできれば、汎用的にtoggleプロシージャをつかって実装したいです。
Sub toggle(ByRef obj As Variant, ByVal propertyName$)
obj.propertyName = Not obj.PropertyName
End Sub
という感じです。
そこで、新たに質問なのですが、”.”を使わずにプロパティを参照するには
どのようにすればいいのでしょうか。
たとえば、Javascriptだとobj["PropertyName"]でプロパティ参照できるのですが、
VBAには類似の呼び出し方法は存在しているのでしょうか。
0101デフォルトの名無しさん
2008/09/05(金) 23:43:02http://pc11.2ch.net/test/read.cgi/bsoft/1219830884/l50x
こちらのほうでも同様の質問をしようと思います。
マルチポストはするな、といわれたくないため、先に宣言しておきます。
■ このスレッドは過去ログ倉庫に格納されています