1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ] ExcelのVBAに関する質問スレです 前スレ 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)
32 名前:デフォルトの名無しさん [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日・・)と付けて作成する方法を 教えてください。 参考になりそうなサイトでも構わないです。 よろしくお願いします。
33 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:45:36 ] >>31 あぁ!?そうなんですか!? ほかのバージョンではできるんでしょうか?! かいかえようかなぁ・・・
34 名前:y mailto:sage [2008/08/29(金) 22:05:49 ] >>32 「FileCopyステートメント」で検索してみてください。
35 名前:y mailto:sage [2008/08/29(金) 22:39:09 ] >>29 「プロシージャ内で宣言したRange型変数の書式」とありますが、 宣言された時点でのRange型変数は、まだどこのセルを指すか 決まっていないため、書式を設定することはできません。 Range型変数に任意のセル範囲をSetした上で、そのセル範囲の 条件付書式の書式をVBAで設定する方法を、ということでしたら、 まずは条件付書式設定の作業を「マクロの記録」(>>1 ★6)を 使ってコード化し、「Selection」となっているところを任意のセル範囲 に対する操作になるよう書き換えてください。そうして出来上がった コードを、自作フォーム上のコントロールのイベントプロシージャから 呼び出すようにすれば、自作フォームから操作できます。 始めに「組込ダイアログボックスから操作する」とあり、 後で「自作フォーム上で再現したい」とありますが、 組み込みダイアログボックスと自作フォームは別物です。 おそらく「自作フォーム」のつもりだと思いますが、 混同しないよう気をつけてください。
36 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:49:23 ] >>32 マクロを記録して、やりたいことやってみろ
37 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:36:33 ] >>33 そもそもOutlook20033なんてない。
38 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 19:44:37 ] Excel20033はあるよ
39 名前:y mailto:sage [2008/08/30(土) 21:14:32 ] Outlook20033の検索結果 5 件中 1 - 5 件目 (0.39 秒) Excel20033の検索結果 8 件中 1 - 8 件目 (0.15 秒)
40 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 23:17:12 ] うちはExcel2003.3だけど
41 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 02:30:40 ] >>15 はできたの?
42 名前:デフォルトの名無しさん mailto:age [2008/08/31(日) 03:15:03 ] 【1 OSの種類 】 WindowsXP 【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へ書き込みたいのですが、自分の知識ではどのようにコーディングすればいいのか 全然判らないので、よろしくお願いします。。。
43 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 06:07:21 ] >>42 >>1 ★5 「なつやすみのしゅくだい」はじぶんでやりましょう
44 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 07:18:59 ] ぎりぎりまで放っておくのが悪い
45 名前:デフォルトの名無しさん [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"
46 名前:デフォルトの名無しさん [2008/08/31(日) 10:28:55 ] >>42 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+
47 名前:y mailto:sage [2008/08/31(日) 11:07:20 ] VBA経験が「皆無」という生徒に、ExcelVBAでDAOを用いMDBに接続してデータを取得・更新する、 という課題は荷が重すぎるような...。>>42 の学校ではどういうカリキュラムでVBAを教えているのか わかりませんが、最低限その課題を解くために必要な授業を受けるか、必要な説明が書かれた テキストが配布されているなら、とにかくそれらを参考に自分で何かコードを書いて、 再度質問してみてください。
48 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 11:36:11 ] んな、難しいもんでもないような。 1日ぐぐって、サンプル試すだけでできるようなるっしょ。
49 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 11:43:56 ] >>47 あんた優しいな。 経験皆無なわけないじゃん。 >>42 が授業聞いてないだけだよ。
50 名前:y mailto:sage [2008/08/31(日) 11:48:33 ] >>45 GroupItemsプロパティから、そのグループに含まれているすべてのシェイプのコレクションを取得できます。 グループを解除する前に、その情報をCollection型変数にでも保管しておいて、 それぞれのテキストを書き換えた後、その情報をもとに再びグループ化すれば、グループ名を使わずに実現できます。 >>48 , >>49 情報系の学生で、ちょっとでも他の言語の経験があれば何とかなるかも あとは>>42 の頑張り次第ですね。
51 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 12:28:05 ] 参考書とか期限みたら意味ないことくらいわかるでしょ コードくれよ
52 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 12:32:00 ] 納期〆切寸前の苦しみを自力できりぬけんのが一番の経験だからな。 おまえのことをおもって、今後誰もレスをせんだろうな。
53 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 13:11:22 ] yウゼー
54 名前:y mailto:sage [2008/08/31(日) 13:46:53 ] >>41 それについて私も気になってました。>>16 に書いてある方法を自分でも 調べていたんですが、シェイプに「keyプロパティ」ってあるんでしたっけ? オブジェクトブラウザで探しても見つかりません。
55 名前:45 mailto:sage [2008/08/31(日) 15:17:38 ] 質問を変えます。 複数のグループ化されたオートシェイプのうちの一つを指定するのに ActiveSheet.Shapes("Group 526").Select のようにではなく、例えばRange("B5")の上に掛かってるグループを指定する、 というような方法はありますか? シートもどんどん複写して使いますので名前やインデックスだと手に負えない気がします。
56 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 15:59:55 ] >>53 役に立ちそうで立たないからな。
57 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 17:56:34 ] コテつけてくれてるんだから見たくない奴はNG指定しろ それすらできないなら文句言うな
58 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 22:36:57 ] >>16 >>54 keyプロパティはないけどidプロパティでシェイプを特定できるから、(id,座標)のような配列や コレクションを用意しておいて座標<->シェイプの関連づけをすれば解決するんじゃないかな。
59 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 03:45:00 ] >>55 TopLeftCell プロパティとか BottomRightCell プロパティを利用するのだと思います
60 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:34:42 ] Excel.Excel.Excel
61 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:49:54 ] 顧客名簿を作ったのですが、2000件近くなり電話番号で検索できるようにしたいと思っています で、ユーザーフォームで「電話番号入力」欄を作り、そこに電話番号を入れて「検索」ボタンを押すと、 電話番号が一致した「顧客名」、「住所」を同じユーザーフォームに表示するようにしたいのですが、 どんなコードを使うと良いのかヒントを教えていただけませんか? シートには、 A B C D 顧客名 電話番号 住所1 住所2 1 あいだ 090xxxxxxxxx 東京都 杉並区 2 いとう 080xxxxxxxx 北海道 札幌市 という風に記入しています B1の電話番号「090xxxxxxxx」を「電話番号入力」欄に入れて「検索」ボタンを押すと 「顧客名」 あいだ 「住所1」 東京都 「住所2」 杉並区 という風に表示できるようにしたいのです。 Excelは、2000 OSは、Winddows XP SP3です
62 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:51:35 ] いちおうユーザーフォームを使って形だけは作って、 「検索」ボタンを押すと該当するデータがない場合にメッセージが出るようにはしたのですが、 そこから先が(というか、ほとんど進んでいないのですが)見当がつきません
63 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 02:35:21 ] Findで電話番号を検索して行位置を取得 あとはCellsでデータを取ればいい
64 名前:デフォルトの名無しさん [2008/09/02(火) 18:47:07 ] ChDir ThisWorkbook.Path Chdrive ThisWorkbook.Path とやって作成した奴を 他人のPCで実行させても同じフォルダ内のファイルを探せなくてエラーが出ます。 デスクトップのフォルダで動作させても msgbox ThisWorkbook.Pathでは〜¥Tempとなっています。 ユーザー設定のカレントは空白にしても変わりません。 XPの2003で作成し、会社の2007では動作しましたが他のPCのXP、2003で発生します。 どのように対処すべきですか?
65 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 20:52:52 ] 日本語でおk
66 名前:64 mailto:sage [2008/09/02(火) 22:13:35 ] 要は、デスクトップで起動させたブックのThisWorkbook.Pathが なぜ関係ないC:\〜¥〜¥Tempになってしまうのか?ってことです。
67 名前:デフォルトの名無しさん [2008/09/02(火) 23:44:42 ] >>64 OfficeXP・2003からOffice2007にアップグレードすればおk
68 名前:デフォルトの名無しさん [2008/09/03(水) 19:41:38 ] EXCEL2007です。 以下のコードで、実行時エラー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
69 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 21:50:31 ] cがゼロになってるとか
70 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 21:51:17 ] cがゼロじゃなくて、cが1だからCells(r, c - 1)が存在しないとこを参照してるってことね
71 名前:デフォルトの名無しさん [2008/09/03(水) 23:46:30 ] VBAを1週間前から勉強していて、すごーく簡単なプログラムは作れるようになったのですが、 いまいち理解しているのかどうかがわかりません。 勉強の仕方はネットで調べながら・・・なのですが、 みなさんはどのように勉強してましたか? 課題をもらえるとやりやすいのですが、一人でやってると自分が何をしているのか わからなくなります。覚えるコツなどありましたら教えてください。
72 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 23:53:34 ] >>71 興味あるものを作るところから始めたら? 仕事なら、覚えるしかないからかえってそういう事を悩まずにすむけど。
73 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 23:57:43 ] >>71 おれはシューティングゲーム→ギャルゲー→RPGと作って 無駄な時間をすごした。
74 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 03:13:53 ] 俺はVB→ExcelVBAだったから特に勉強とかしてないけど、 VBは最初はいろんな小物ツールとかつくって覚えたなぁ。
75 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 03:29:37 ] ExcelVBAだったらExcelオブジェクトを理解することが重要だけど、 VBA全体を勉強したいならWin32APIやWindowsCOMオブジェクト についても勉強する必要があると思うなぁ。 最初はコードが公開されているサンプルを眺めたり流用して何か 役に立つものを作ったらいいと思う。その内にコードが公開されて いないけど実現したい機能とかも自力で作成できるようになるよ。 Officeだったらコードが公開されていなくてもパスワードクラックの ツールがあるからそれ使ってちょっと高度なコードにも目を通すと いいかも。
76 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 03:57:22 ] 結局ダジャレかよ
77 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 11:53:25 ] >>71 質問掲示板の「回答者」になるのが良いでしょう。 どの掲示板が良いかは自分で判断して下さい。 別に書き込まなくても良いので、色々な方のコードと自分のコードを比較する事が勉強になる。
78 名前:デフォルトの名無しさん [2008/09/04(木) 16:15:58 ] VBAでオブジェクト指向プログラミングできるの?
79 名前:デフォルトの名無しさん [2008/09/04(木) 18:43:38 ] むしろ、VBAはOO言語だろ
80 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:18:16 ] まあOO言語としてはかなり不完全だけど 分類的にはOO言語寄りではあるな
81 名前:68 [2008/09/04(木) 19:49:36 ] >>69 ,70 レスありがとうございます。 cはゼロにも1にもなっていないですが・・・。
82 名前:デフォルトの名無しさん [2008/09/04(木) 20:41:23 ] 1つのセルが対象なのにrangeで範囲選択してんの?
83 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 20:45:17 ] いいじゃまいか
84 名前:デフォルトの名無しさん [2008/09/04(木) 21:56:37 ] うーん。出先なんで確認取れないんだけど、 sheets(hoge).range( の形でどうかな? sheet changeイベントで、rangeオブジェクトが保持してるシート名が対象rangeと異なるからエラー出してるとか。 適当だけどw
85 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:23:24 ] >>71 体系だった入門書を通読しろよ、糞ゆとりが
86 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:44:22 ] cellsに修飾が足りないな、きっと
87 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 23:45:43 ] >>68 cに1が入った場合の処理をしていないから Changeイベントループして最終的に >>70 の言う事になってるだけ
88 名前:デフォルトの名無しさん [2008/09/05(金) 00:09:51 ] toggleMerge("A1:A5") という命令でA1:A5の範囲のセルを結合させたり結合解除させたいのですが、 実行させても何も起こりません。エラーすら起こりません。 ばらして同様のことをやるとちゃんと動きます。何が悪いのでしょうか。 以下そのコード Sub toggling(ByRef obj As Variant) obj = Not obj End Sub Sub toggleMerge(ByVal str$) toggling Range(str).mergeCells End Sub
89 名前:デフォルトの名無しさん [2008/09/05(金) 00:35:04 ] スレ違いとは思うのですが助けてください モジュールで有効な変数宣言しようとすると Dimとか打ってたらエラーダイアログが0.2秒ぐらいで6連続くらい連発して打ち切れない Excel2008なんだけど構文チェックスピード早すぎて打てない どうしたらいいのか教えて頂けないでしょうか
90 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 00:46:23 ] >>68 "c"にミスがないのであれば Sheets(hoge).Range((Sheets(hoge).Cells(r, c - 1), Sheets(hoge).Cells(r, c - 1)).Value = rgbnum ↑のようにしてみてはいかがか
91 名前:デフォルトの名無しさん [2008/09/05(金) 00:50:36 ] すみませんが namidame.2ch.net/test/read.cgi/slotj/1216400588/ のスレで確率についてバトルしています 問題はサイコロで1が8回連続して出る確率です バカが多すぎて疲れました 頭の良い皆様、論破してください お願いします
92 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 01:15:08 ] >>90 Worksheet_Changeイベントに記述しているから セルに値を入れる前にイベント発生を止める処理を入れるか cが0にならないようにする処理を入れないと Changeイベントが連鎖してエラーになる
93 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 01:20:01 ] >>89 めっちゃ早く打つ
94 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 01:28:59 ] 質問するのは全然かまわないんだけどさ、質問スレだからな。 でもさ、質問する前に日本語で質問できるようになってから来いよな。 たのむから。
95 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 02:00:19 ] >>92 なるほど。ちょっと賢くなりました。
96 名前:68 [2008/09/05(金) 08:57:53 ] みなさん、レスありがとうございます。 cが特定の値の時にしか、 セルに値を入れないようにしたら うまくいきましたm(__)m
97 名前:y mailto:sage [2008/09/05(金) 17:45:41 ] >>88 おやっ、と思うようなコードですね。 たぶん、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
98 名前:y mailto:sage [2008/09/05(金) 18:04:43 ] >>89 何をした瞬間エラーメッセージが出た、というあたりをもう少し詳しく。>93w >>58 ありがとうございます。やっぱりKeyプロパティはないんですね。
99 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:14:32 ] 何言ってんだこいつ
100 名前:デフォルトの名無しさん [2008/09/05(金) 23:31:49 ] >>97 どうもありがとうございます。 Boolean型のオブジェクトを渡していたからだったのですね。 でもできれば、汎用的にtoggleプロシージャをつかって実装したいです。 Sub toggle(ByRef obj As Variant, ByVal propertyName$) obj.propertyName = Not obj.PropertyName End Sub という感じです。 そこで、新たに質問なのですが、”.”を使わずにプロパティを参照するには どのようにすればいいのでしょうか。 たとえば、Javascriptだとobj["PropertyName"]でプロパティ参照できるのですが、 VBAには類似の呼び出し方法は存在しているのでしょうか。
101 名前:デフォルトの名無しさん [2008/09/05(金) 23:43:02 ] ちょっと早めに知りたいので、 pc11.2ch.net/test/read.cgi/bsoft/1219830884/l50x こちらのほうでも同様の質問をしようと思います。 マルチポストはするな、といわれたくないため、先に宣言しておきます。
102 名前:デフォルトの名無しさん [2008/09/05(金) 23:50:31 ] VBAではインクリメントは a = a+1 と記述するしかないですか? a += 1 a ++ はだめでした。 (下は別言語なので当然ですが・・・。)
103 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:39:09 ] >>100 CallByName >>102 諦めろ。
104 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:25:11 ] hint : overload
105 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 02:05:01 ] A列のセルに入力があればA列の中で同じ入力がないか検索する というマクロを作ろうと思っているのですが、セルの入力判定の方法を教えていただけないでしょうか? 宜しくお願いします。
106 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 03:17:52 ] もっと具体的に
107 名前:105 mailto:sage [2008/09/06(土) 07:39:52 ] 説明が抽象的になってしまいすいません。 A列からF列までそれぞれの列に情報を入力してリストを作っているのですが、 既に何百行も情報を入力していて、都合上同じ情報を追加で入力してしまう恐れがあり、 現在は毎回入力の前にCtrl+Fの検索で既に入力された情報かどうか調べています。 そこでA列のセルに入力があれば入力されたセルより上の既に入力された全てのセルの文字列と比較して、 既に同じ入力があればエラーメッセージを出すというマクロを作りたい次第です。 マクロを作成するにあたって、「A列に入力があれば」という部分をどう書けばいいかわからなかった為質問させていただきました。 A列に同じ情報が入力されるという事は都合上絶対に有り得ない事なのでA列のセルを比較しようと考えています。 ・A列には1行目から空白なく順番に情報が入力されている。 ・新規に入力する際は現在のリストの最終行の次の行に情報を入力している。 という条件があるので、A列に入力があればというよりA列の最終行の次の行に文字が入力されればという方が正しいかもしれません。 説明が下手で申し訳ありません。 宜しくお願いします。
108 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:22:13 ] >>107 Worksheet_SelectionChange
109 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:27:52 ] リアルタイムのイベントハンドラかぁ・・・。 VBAって自分でイベントの作成は出来るのかな。あまり詳しくないんで分からないや:( 若干重くなるけど、sheetのchangeイベントで、セルを移動した時に、A列の最終行の内容と同じ物をチェックするとか。 うーん・・・あまり美しくないよね。 自分でイベント作成出来るのか、私も知りたいです。 詳しい人お願いします。
110 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:56:04 ] >>103 ありがとうございました。
111 名前:105 mailto:sage [2008/09/06(土) 14:30:52 ] >>108 ,109 アドバイスをくださってありがとうございます。 参考にマクロを組んでみようと思います。
112 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 14:45:53 ] >>107 重複データがあるかないかを調べるだけでよければ VBA使わなくても条件付き書式でできる。
113 名前:デフォルトの名無しさん [2008/09/06(土) 16:14:55 ] Excelの VBA の関数の呼び出し方法が分かりませんので、誰か教えて戴けませんでしょうか? C では // 関数の定義 void abc(void) // メインルーチン void main(void) { // 関数名 abc(); } void abc(void) { --- } 上記の方法で関数を呼び出そうとして、 Sub 名前() abc() End Sub :abc() --- return 上記記載の方法では動きませんでした。 素人な問い合わせで申し訳ありませんが宜しくお願いします。
114 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 16:25:59 ] 関数なんだからなんらか値を返す 仮にintegerの型でパラメータを受取ってintegerの何かを返すとして Sub 名前() Dim a as integer Dim param as integer param=100 ←何かの数字(integerの範囲内) a = abc(param) End Sub Function abc(param as integer) as inetger 〜 abc = **** ←何か処理した結果のintegerの数字 End Function
115 名前:デフォルトの名無しさん [2008/09/06(土) 17:04:48 ] <<114 113 です。早速のお教え有難う御座います。 なんらか値を返す様に変更します。
116 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:10:04 ] >>113 のCのコードを何も考えずにVBAにするとこうだぞ。 Sub main() Call abc() End Sub Sub abc() --- End Sub 戻り値の型がvoidの関数はSub、それ以外はFunction。 戻り値を受け取らない場合、Sub/FunctionにかかわらずCallを付ける(Call使わない記法もあるけど)。
117 名前:デフォルトの名無しさん [2008/09/06(土) 17:30:42 ] >>116 113 です。いろいろお教え戴き有難う御座います。 この方法が簡単なので採用させて戴きます。
118 名前:デフォルトの名無しさん [2008/09/06(土) 18:07:40 ] >>114 >>116 113 です。プログラム作成途中ですが、両方とも必要になりましたので、 共に採用させて戴きます。いろいろと、有難う御座いました。
119 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:14:05 ] pc11.2ch.net/test/read.cgi/tech/1204552981/878
120 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:37:07 ] 関数は、なんらかの値をかえすべきであるという考えた方が 身に染み付いてるから、SubとVoid関数は非常にきもちわるい。
121 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:38:23 ] 要するに時代遅れですね
122 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:36:46 ] かえり値もたない関数は、デバッグがむずかしくなるから、医療系の俺の会社じゃ よほどのことがないかぎり作らない。むしろ121がしろうと
123 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:52:19 ] >>122 VBAスレで恥ずかしい事いうなよおっさん。
124 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 01:49:03 ] LispとかMLでの話なら>>120 >>122 も分かるが、 VBAで純粋関数型プログラミングは無茶があるだろ、常識的に考えて。
125 名前:89 mailto:sage [2008/09/07(日) 03:31:47 ] むっちゃ早く打つ案に似た解決策で自己解決しました。 必殺コピペです。 グローバルエリアに変数定義しようとしたらDimと打った時点でエラーメッセージが頻発 変数書こうとしても打っている途中でメッセージ頻発して書けない。 どこかにエラーチェックのタイミングプロパティがあると思うがコピペで解決したから諦めようかと思います
126 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 07:55:30 ] そういや、functionしか存在しない言語もあるな。
127 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 10:23:41 ] よくいるんだよね。VBにしかVariant型がないと思ってる自称上級者
128 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:27:52 ] ファイルを開かずにアクティブシートを変更するにはどうしたら良いでしょうか。 AccessのTransferSpreadsheetでエクセルの任意シートへデータを出力していますが、 エクセルファイルを開いた時に、値を出力したシートがアクティブになっているようにしたいのです。
129 名前:128 [2008/09/07(日) 14:30:04 ] ついでに読み取り専用属性の操作もできればサイコーです
130 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:45:07 ] please tell ass in Japanese... Sheets("hoge").Activate Sheets("hoge").SaveAs "c:\hoge.xlsx", xlWorkbookNormal, , , True
131 名前:128 mailto:sage [2008/09/07(日) 15:15:51 ] えー、ファイルを開かない状態でアクティブシートを変更したいのです。 そのやり方だとインデックスエラーになっちゃうんですけど。
132 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:26:27 ] Excelオブジェクト生成 ファイルオープン(非表示) シートをアクティブにする 保存