1 名前:既定のプロパティさん mailto:sage [2012/01/29(日) 00:05:13.16 ] 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/ 13 pc12.2ch.net/test/read.cgi/tech/1254281104/ 14 pc12.2ch.net/test/read.cgi/tech/1262748898/ 15 pc12.2ch.net/test/read.cgi/tech/1271261239/ 16 hibari.2ch.net/test/read.cgi/tech/1280045912/ 17 hibari.2ch.net/test/read.cgi/tech/1289182437/ 18 hibari.2ch.net/test/read.cgi/tech/1298240666/ 19 hibari.2ch.net/test/read.cgi/tech/1305754555/ 20 hibari.2ch.net/test/read.cgi/tech/1312435844/ 21 hibari.2ch.net/test/read.cgi/tech/1316931607/ 前スレ: Excel VBA 質問スレ Part22 toro.2ch.net/test/read.cgi/tech/1322400978/
194 名前:187 [2012/02/13(月) 01:11:58.07 ] >>188 ありがとうございます。 MsgBox Hex(Asc("あ")) は 82A0と表示されましたが MsgBox Hex(Asc(Chr(&H82) + Chr(&HA0))) が 8145になってしまいましたが MsgBox Hex(Asc(Chr(&H82A0)) では 80A0と表示されたのでこちらとは一致させることができました。 全角文字の場合には &H80A0 のような書きかたが正しいのでしょうか? しかし >>130 のコードで ”あいうえお”を検索したく msg = Chr(&H82) + Chr(&HA0) + Chr(&H82) + Chr(&HA2) + Chr(&H82) + Chr(&HA4) + Chr(&H82) + Chr(&HA6) + Chr(&H82) + Chr(&HA8) InStr(Text, msg) とした場合には検索できるのですが msg = Chr(&H82A0) + Chr(&H82A2) + Chr(&H82A4) + Chr(&H82A6) + Chr(&H82A8) InStr(Text, msg) のような書きかたをした場合には検索できませんでした。 ”あいうえお” を検索する場合にはどういう書きかたをすればよいのでしょうか?
195 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 02:04:05.27 ] 「あいうえお」と書かれたテキストファイルを >>130 のコードに突っ込めば直ぐ解る。
196 名前:187 mailto:sage [2012/02/13(月) 02:53:20.17 ] >>195 きさま、舐めとんかゴルァ
197 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 19:33:16.74 ] 保存ダイアログが出たときに、特定のフォルダーが出るように下記の様に 書いたのですが、Win7 32bitでは希望通りの動きなのですが、64bitだと マイドキュメントが選択された状態で表示されてしまいます。 xlAPP.GetSaveAsFilename(InitialFileName:=SaveDir & FileName) 64bit版でも指定したフォルダーを選択状態にさせるにはどうすればいいですか? よろしくお願いします。
198 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 19:57:03.92 ] すみません。 コピーし忘れがありました。 一度保存すると、その時のフォルダーを保存しておいて、2回目からは SaveDirに記憶したフォルダーを選択するようにしています。 SaveaDir = CurDir そのために上記の様にして記憶するようにしています。 (このスレを読んで参考にしました。) 32bit版は変数の中身が変わるのですが、64bit版ではブックを読みだしたフォルダーから 変更されない感じです。 よろしくお願いします。
199 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 20:18:43.27 ] >>198 省略しすぎ。もう少しコードを見せられないの?
200 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 21:24:43.24 ] >>197 ディレクトリだけ? ファイル名は正しく表示されるの?
201 名前:デフォルトの名無しさん [2012/02/14(火) 15:30:51.13 ] VBAについて質問させてください! OS Windows7 2003使ってます。 下記のプログラムでYAHOO競馬からラップタイムって物だけをダウンロードしてきてるんですが、今は 1Rづつしか持って来れてないんで、これを全レース(最大で1日36R)一回の作業でダウンロードしてくる プログラムに直せませんか? 宜しくお願いいたします! Sub test() Dim ie As Object Dim elements As Object Dim i As Integer Cells.Clear Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "keiba.yahoo.co.jp/race/result/1206010512/ " Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop Set elements = ie.Document.getElementsByTagName("div") For i = 0 To elements.Length - 1 If elements(i).innertext Like "ラップタイム*" Then Set elements = elements(i).getElementsByTagName("td") Exit For End If Next For i = 0 To elements.Length - 1 Range("B" & i + 1).Value = elements(i).innertext Next ie.Quit Set ie = Nothing End Sub
202 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 17:43:32.49 ] >>197 & "\" &
203 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 21:01:01.46 ] >>197 32ビット版なので確認できないが、 64ビット版だとSaveDirに関係なくいつもマイドキュメントが開くってことか Sub test() Const FileName = "test.xlsx" Const SaveDir = "C:\" Dim fname MsgBox CurDir fname = Application.GetSaveAsFilename(InitialFileName:=SaveDir & FileName) MsgBox CurDir End Sub
204 名前:197 mailto:sage [2012/02/14(火) 22:05:33.85 ] 皆さん、レスありがとうございます。 どうも、CurDirの返り値が32bit、64bitで違うみたいです。 32bitの時は保存したり、読み出したりした時のフォルダーが返ってくるのですが、 64bitの時は読み出したフォルダーが返ってくるみたいです。 '保存 Save_NAME = xlAPP.GetSaveAsFilename(InitialFileName:=Save_Name) '保存先フォルダー記憶 File_Name = Dir(Save_NAME) Save_dir = Replace(Save_NAME, File_Name, "") こんな感じでできるようになりました。
205 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 22:07:08.20 ] × Save_NAME = xlAPP.GetSaveAsFilename(InitialFileName:=Save_Name) ○ Save_NAME = xlAPP.GetSaveAsFilename(InitialFileName:=Save_dir) です
206 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 00:10:13.68 ] >>201 いらん機能までゴテゴテ付けたら改行が多すぎるって怒られちったお Sub test() Dim ie As Object, elements As Object Dim i%, url$, n%, y%, m%, d%, r% Dim name As Variant Dim flg As Boolean Dim j As Variant name = Array("札幌", "函館", "福島", "新潟", "東京", "中山", "中京", "京都", "阪神", "小倉") url = "keiba.yahoo.co.jp/race/result/ " j = Application.InputBox("開催地、年月日をすべて2桁の数値で入力" & vbCrLf & _ "札幌=01,函館=02,福島=03,新潟=04,東京=05,中山=06,中京=07,京都=08,阪神=09,小倉=10", "下記の順にデータを入力してください", , , , , , Type:=2) If j = False Then Exit Sub If Len(j) <> 8 Then Exit Sub n = Left(j, 2): y = Mid(j, 3, 2): m = Mid(j, 5, 2): d = Mid(j, 7, 2) With ThisWorkbook.Sheets(1) .Cells.Clear .Cells(1, 1) = y & "年" & m & "月 " & name(n - 1) & d & "日目" For i = 1 To 11 .Cells(1, 1).Offset(i).Value = "^" & i * 200 Next i Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True
207 名前:206の続き mailto:sage [2012/02/15(水) 00:10:51.20 ] For r = 1 To 37 flg = False ie.navigate (url & y & Format(n, "00") & Format(m, "00") & Format(d, "00") & Format(r, "00") & "/") Do While ie.Busy Or ie.readyState <> 4: DoEvents: Loop Set elements = ie.document.getElementsByTagName("div") For i = 0 To elements.Length - 1 If elements(i).innerText Like "ラップタイム*" Then flg = True Set elements = elements(i).getElementsByTagName("td") Exit For End If Next i If Not flg Then .UsedRange.EntireColumn.AutoFit Exit For End If For i = 0 To elements.Length - 1 .Cells(1, 1).Offset(, r).Value = r & "R" .Cells(2, 1).Offset(i, r).Value = elements(i).innerText Next i Next r Set elements = Nothing ie.Quit Set ie = Nothing End With End Sub
208 名前:206 mailto:sage [2012/02/15(水) 00:15:06.33 ] 個人的には ie.visible=true はFalseのほうが画面の切り替えがなくて好きだけど、 非表示にしとくとIEのアクセスでエラーが出てるときの エラーメッセージも表示されなくなるんだっけ?
209 名前:206 mailto:sage [2012/02/15(水) 00:19:14.69 ] 連投スマソ 入力する年月日のうち、日は日付じゃなくて開催何日目かなので そこんとこよろしく (たとえば、06120105は中山競馬場、2012年1月の開催5日目の意味)
210 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 00:31:34.64 ] それだと一つの競馬場で36レースやらないと全レースのデータは拾えないんじゃね? 多分、一つの競馬場では1日に12レースしかやらないと思うよ。 同じ日に最大で3カ所開催するから3*12で36レースってことじゃないかな?
211 名前:206 mailto:sage [2012/02/15(水) 00:54:42.24 ] >>210 さん えーと、 ご指摘ありがとうございます・・・orz 私は競馬やったことないんで知りませんでした。 そうすると、開催地の変更もループ処理に掛けないといけないですね。 でも、ちょっと調べたところ、 keiba.yahoo.co.jp/schedule/list/2012/?month=1 ここを見たら同じ日でも場所によって開催何日目かがまちまちなので、 単純に場所だけを変えても上手くいかなそうです。 (データを取り込むURLが [年][場所][月][開催何日目][何レース]の組み合わせですので、 日付から開催日を知る方法がないとすべてのデータが取り込めません。) 同じ日に開催する場所や日数に何か規則性があるなら良いのですが、 私は競馬のことをよく知らないので見当も付きません。 力不足で申し訳ないです。
212 名前:デフォルトの名無しさん [2012/02/15(水) 02:52:59.70 ] 皆さんホントこんな初心者の為に考えてくださってありがとうございます! 何か別な方法考えてみます!
213 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 03:05:01.57 ] >>212 丸投げじゃなく自力でがんばってみる気があるなら keiba.yahoo.co.jp/schedule/list/2012/?month=1 ↑のページからURL情報を取得すればできると思うぞ 開催年と開催月 は↑のURL にあるし 開催日はページ内にあるから対象日の 開催名のリンク先URLを取得して レースNoを付加してやればいいと思う
214 名前:デフォルトの名無しさん [2012/02/15(水) 04:15:47.11 ] ありがとうございます! なんとか頑張ってみます!!
215 名前:デフォルトの名無しさん [2012/02/15(水) 11:53:49.85 ] ユーザーフォームに複数の項目(名前、年齢、身長、体重など)を設定して、 空欄があった場合に「名前を入力して下さい」とかメッセージボックスで表示するようにしたいんです。 それでもし、複数の項目が空欄なら「名前を入力して下さい」「年齢を入力して下さい」と 1つのメッセージボックス内に表示されるようにしたいのです。 順列組み合わせをIFしていったらすごいことになるので短くプログラムする方法はないかなと思いまして。 IFのネストとかstrを使ってとか断片的には思い浮かぶんですけど……
216 名前:デフォルトの名無しさん [2012/02/15(水) 12:31:51.42 ] 質問させてください。 シートにフォームのボタンを貼ったのですが、このボタンをVBAから押した ことにする方法はあるでしょうか。
217 名前:デフォルトの名無しさん [2012/02/15(水) 14:01:56.17 ] >>215 何項目あるかしらんが、一つずつ検査して文字列にまとめるのが結局いちばんはやくて保守しやすいんじゃね? Private Sub CommandButton1_Click() Dim str As String If TextBox1 = Empty Then str = "TextBox1が空白です" & vbCrLf End If If TextBox2 = Empty Then str = str & "TextBox2が空白です" & vbCrLf End If If TextBox3 = Empty Then str = str & "TextBox3が空白です" & vbCrLf End If If TextBox4 = Empty Then str = str & "TextBox4が空白です" & vbCrLf End If If TextBox5 = Empty Then str = str & "TextBox5が空白です" & vbCrLf End If MsgBox str End Sub
218 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 14:20:34.57 ] >>217 なりました! ありがとうございますm(_ _)m
219 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 17:36:33.04 ] >>216 そのボタンを押した時に実行するプロシジャを実行すれば良いだけなのでは?
220 名前:デフォルトの名無しさん [2012/02/16(木) 01:25:02.28 ] 横から失礼。 > そのボタンを押した時に実行するプロシジャを実行 でなく、そのボタンを押す事は出来ないの?
221 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 01:40:57.51 ] 命令文うんたらかんたら CommandButton1_Click 命令文うんたらかんたら
222 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 03:33:49.75 ] >>220 メッセージを送ればボタンは押せるけど プロシージャ実行と結果は同じだから手間がかかるだけで意味がない 他の常駐アプリでボタンクリックのメッセージ監視目的とかだとスレ違い気味だし そんだけ知識ある人がこんな質問するとは思えない
223 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 09:20:50.66 ] >>220 UWSC使え w
224 名前:216 [2012/02/16(木) 10:15:08.10 ] みなさんありがとうございます。 >>222 どうやってシートのボタンオブジェクトを取得して、どんなメッセージを送ったらよいのでしょうか。 VC++とかはよく使いますが、ExcelVBAは初めてです。 ユーザーフォーム上のボタンは押したことにできるので、シート上のフォームのボタンも押す方法が ないか探しております。 よろしくお願いいたします。
225 名前:デフォルトの名無しさん [2012/02/16(木) 12:51:14.76 ] >>224 Sub onButton() Worksheets("Sheet1").CommandButton1.Value = True End Sub Sub onButton() Worksheets("Sheet1").OLEObjects("CommandButton1").Object.Value = True End Sub どちらでもすきなように
226 名前:デフォルトの名無しさん [2012/02/16(木) 18:29:17.43 ] VBA初心者です Excel2007 A1 ALL1 A600 ALL600 この範囲内に画像を取り込んでモザイク画を作っています。 画像サイズによっては空白部分も多いのですが空白部分を省いて印刷するにはどうすればいいでしょうか? プリンターの関係上A1サイズなので後で組み合わせるのにヘッダーでページ番号もつけています
227 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 19:00:52.59 ] >>226 印刷した時にどこで切れるかはHPageBreaks(n).Location またはVPageBreaks(n).Locationで調べることができる あとは、ページごとにセルの色が全部標準か白なら印刷しないっていう ちょっと面倒なプログラムを書くしかない
228 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 20:50:50.26 ] >>225 それってフォームのボタンでないんじゃない
229 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 22:53:25.40 ] 教えてください VBAにアドインってのが有るそうなんですが、マクロをアドインとかいうものにするのはどういうメリットがあるんですか? 皆さん、どういう風につかっておられます?
230 名前:216 [2012/02/16(木) 23:29:29.26 ] >>225 ありがとうございます! コントロールツールボックスのボタンの場合は、どのようにしたらよいでしょうか。
231 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 23:37:49.90 ] >>230 >>225 がコントロールツールボックスのボタンの場合じゃないのか
232 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 08:00:18.97 ] >>229 アドインって .xla のこと? .dll のように、色んなワークブックからCallされる自分用関数をまとめておくとか。 でも、キャッシュみたいのがかかっていて結果不定になるので、デバッグ面倒だよ。
233 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:43:41.83 ] >>232 229です。 >結果不定になるので、デバッグ面倒だよ。 なんか扱いが大変そうだな・・・ 教えていただきありがとうです
234 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:52:06.19 ] >>232 > でも、キャッシュみたいのがかかっていて結果不定になるので、デバッグ面倒だよ。 んなこと全然無い。 アドインのメリット。 例えば、社内用の勤怠計算を行うマクロを書いたとする。 そのマクロが入った、データ入力用シート入りのBookを社員に配布する。 配布した後で、バグが見つかって修正したり、機能を追加したりしたくなったらどうする? 「マクロが入った、データ入力用シート入りのBook」だと、もうデータ入力済みの場合、 全員のBookをまるごと取り替えることはできないから、マクロ部分だけ入れ替える必要がある。 これを、「勤怠計算を行うマクロ」が入ったxlaと、データ入力用のBookに分けておくと、 xlaを更新したら全員に配布して、ファイルを入れ替えてねで済む。 もちろん、他言語のライブラリ同様、ライブラリとしてのメリットは全て持ってる。
235 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:17:34.63 ] 関数について質問です 1日 名前A 条件1 1日 名前B 条件2 8日 名前C 条件1 8日 名前D 条件2 8日 名前E 条件1 8日 名前F 条件2 とシート1にデータがあり、別シートのリストに8日で条件2に合致する名前だけを 上から順に(空白行無しで)抜き出す場合、どのような関数を使えば出来るでしょうか? IFでやろうとするとどうしても不一致の行が空白になってしまいます。 お力添えをよろしくお願いします。
236 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:53:43.47 ] >>235 VBAでではなく、ワークシート関数でってなら Excel総合相談所 100 toro.2ch.net/test/read.cgi/bsoft/1325935411/l50
237 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 20:33:56.12 ] なにそのタライ回し。いつもより多く回ってるんじゃないの。
238 名前:デフォルトの名無しさん [2012/02/17(金) 20:43:07.85 ] このスレはいつもこうだよ
239 名前:デフォルトの名無しさん [2012/02/18(土) 01:22:32.32 ] チェックシートを作成したく、 表の右に設置したボタンを押すと隣接するセルの背景色が変化するものを作っています。 ボタンの数が100程度あるのですが、ボタン1つ1つに以下の関数を格納するのには非常に手間がかかります。 Private Sub CommandButton1_Click() With Range("A2").Interior .ColorIndex = 36 .Pattern = xlSolid End With End Sub Private Sub CommandButton2_Click() With Range("A3").Interior .ColorIndex = 36(省略) 一括で設定する方法はありませんか?
240 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:26:54.85 ] 修正です 誤 With Range("A2").Interior 正 With Range("A2:C2").Interior
241 名前:デフォルトの名無しさん [2012/02/18(土) 01:31:10.99 ] × チェックシートを作成したく、 ○ チェックシートを作成したいのですが、 日本語は大切にね
242 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:34:56.42 ] >>239-240 スレ違いな答えになるけど、条件付き書式を使ったほうがいいかと。 書式を「"○"」、条件付き書式として0より大きいなら背景色を設定とかやれば、 1を入力してやればチェックって感じに出来ると思う。
243 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:42:17.46 ] >>239 コマンドボタンはどのセルに配置してあるの? D列のセル?
244 名前:239 mailto:sage [2012/02/18(土) 02:02:35.32 ] >>241 失礼しました。 以後気をつけます。 >>242 ググってみましたが自分の希望に沿えるものではなさそうです。 あくまでワンクリックで背景色の変化ができるものを作成したいと思っております。 参考画像を用意いたしました。ttp://uploader.sakura.ne.jp/src/up84658.jpg 作成したいと思っているチェックシートについて ・隣接する行の背景色を変えることによるチェックをする。 ※詳細 チェックボタンを押すと背景色を変化させる (With Range("A2").Interior .ColorIndex = 36 以下略) さらに隣の取り消しボタンを押すと背景色なし設定にする ・値の入力ではなく、ボタンをワンクリックすることで変化させる。(これが重要事項だと思われます) 例の画像は8行ですが実際に作成するものは100行以上になります。 以上になります。よろしくお願いいたします。
245 名前:239 mailto:sage [2012/02/18(土) 02:11:02.38 ] >>243 画像では見やすくするために中央のほうへ寄せましたが、 いわゆるD列にボタンが配置されているものと思われて結構です。 ボタン自信をセルに配置することが自分の知識ではわからないので、 配置はコピーで行ってます。(セルを選択してCtrl+vを押すだけなので我慢) つまるところボタンのオブジェクト名の番号が1,2,3...と上昇します。 ボタンが数個なら>>239 のコードを複数コピーして値を変化させることができますが、 100以上となると無理ではありませんが非常に面倒です。 そこで一括で設定する方法は無いものか模索していたところです。 多分一番重要なことを忘れていましたが私はExcelVBAについては初心者です。 度々すみません。よろしくお願いいたします。
246 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 02:15:02.93 ] >>244 答えてあげたいが、時間がない 例えば topleftcellを引数で渡すプロシージャを作って それぞれのボタンクリックのプロシージャから 呼び出せば? テキスト(プログラム)を出力するプログラムを書いて それをインポートする手もある クラスモジュールを使うか
247 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 02:56:50.47 ] >>244 よくわからんがこんなのでいいのか? ' ボタンを D5 から 10個作成 Sub CreateButtons() Set baseaddress = ActiveSheet.Range("D5") For i = 1 To 10 CreateButton baseaddress.Cells(i, 1) Next End Sub Sub CreateButton(cell) x = cell.Left y = cell.Top w = cell.Cells(2, 2).Left - x h = cell.Cells(2, 2).Top - y Set btn = ActiveSheet.Buttons.Add(x, y, w, h) btn.Text = "chk" btn.Name = "chkbtn_" & cell.Row btn.OnAction = "CheckButton_Click" End Sub Sub CheckButton_Click() Row = Mid(Application.Caller, 8) With Range("A1").Cells(Row, 1).Interior .ColorIndex = 36 .Pattern = xlSolid End With End Sub
248 名前:247 mailto:sage [2012/02/18(土) 03:13:52.81 ] 一応簡単に説明しておくと ボタンクリックのイベント内からは Application.Caller でクリックしたボタン名が取得できる ボタン名をあらかじめ chkbtn_<行番号> として作成しておき、イベント内で行番号をボタン名から切り出して現在の自分の行番号を取得している イベント内でボタン名が取得できるので、クリックのイベントプロシジャを個別に作成する必要はなく、すべて共通でよい この例はチェックボタンだけだけど、当然同じやり方でクリアボタンも作成できる
249 名前:239 mailto:sage [2012/02/18(土) 03:25:21.74 ] >>247 試してみましたがうまく動作しませんでした。 多分こちらのボタンの置き方が悪いのかもしれません。 (前述の通りExcelVBA及びコンソールの配置等は初心者です。すみません。) また関数の大まかな意味も知っておきたいのですが、 もしお時間が許すのであればご教示のほどをお願いします。
250 名前:239 mailto:sage [2012/02/18(土) 03:26:41.00 ] >>247 書き込み中のすれ違いになってしまいました。 ありがとうございます!! もう一度試してみます。
251 名前:239 mailto:sage [2012/02/18(土) 03:45:13.45 ] >>247 すみません何度か試行錯誤を繰り返してみましたがどうにもうまく動作しません。 お手数ではありますが扱い方のご教示、 もしくはソースファイルのアップロードをお願いいたしたいのですが。
252 名前:54 mailto:sage [2012/02/18(土) 03:52:25.06 ] >>241 別に間違ってないよ。
253 名前:デフォルトの名無しさん [2012/02/18(土) 04:37:15.26 ] >>251 俺は247さんじゃないけど、 247さんのコードを標準モジュールにコピペするだけで動いたよ (全部コピペして、Sub CreateButtons() を実行) ちなみに環境はWin7 64bit、Excel2000、です むしろ貴方がどのようにやったのかを具体的に提示したほうが早いと思う。 たとえば上記コードを標準モジュールじゃなくボタンに貼り付けたりしてないよね?
254 名前:239 mailto:sage [2012/02/18(土) 05:25:47.81 ] >>253 今までシート自体にコードを貼り付けていました。 標準モジュールを新たに挿入して貼り付けたら無事動作いたしました! 大変勉強にもなりました。 ご回答していただいた皆様本当にありがとうございました。 ソースコードを記述いただいた>>247 さんには感謝の限りです! 本日は朝も近いのでお休みいたします。 最後に改めてありがとうございました。
255 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 06:44:14.37 ] 俺もこれ利用したいけど 単一のセルしか塗りつぶしできない どうすれば行を(この場合だとA2からC2までの)指定出来ますかね
256 名前:253 mailto:sage [2012/02/18(土) 09:55:21.93 ] >>255 With Range("A1").Cells(Row, 1).Interior を With Range("A1").Cells(Row, 1).Resize(, 3).Interior にするとAからCの3列が書き換わる
257 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 13:19:54.76 ] すみません>>247 のコードでボタンを二つ作りたいのですが、 標準モジュールを新たに挿入すると内容が二つとも同じになってしまいます。 対処法を調べても理解できないのでどなたか教えてください。
258 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 13:37:55.77 ] >>257 Sub CreateButtons() Set baseaddress = ActiveSheet.Range("D5") For i = 1 To 10 CreateButton baseaddress.Cells(i, 1), True CreateButton baseaddress.Cells(i, 2), False Next End Sub Sub CreateButton(cell, check) x = cell.Left + 4 y = cell.Top + 2 w = cell.Cells(2, 2).Left - x - 4 h = cell.Cells(2, 2).Top - y - 2 Set btn = ActiveSheet.Buttons.Add(x, y, w, h) btn.Text = "" btn.Name = "chkbtn_" & cell.Row If check Then btn.OnAction = "CheckButton_Click" Else btn.OnAction = "ClearButton_Click" End If End Sub
259 名前:258 mailto:sage [2012/02/18(土) 13:38:28.19 ] 続き Sub CheckButton_Click() Row = Mid(Application.Caller, 8) With Range("A1").Cells(Row, 1).Interior .ColorIndex = 36 .Pattern = xlSolid End With End Sub Sub ClearButton_Click() Row = Mid(Application.Caller, 8) With Range("A1").Cells(Row, 1).Interior .Pattern = xlNone End With End Sub
260 名前:253 mailto:sage [2012/02/18(土) 13:46:16.46 ] >>257 具体的にはどう調べたの? これって調べてどうこう言うような次元の話じゃなくて 単純にVBAのプログラムが読めるかどうかの話だよ。 一応説明すると、247氏のコードは3つのプロシージャから構成されてるけど、 Sub CreateButtons() は単に最初のセル位置(D5)を決めて、 そこから下方向に10回同じことを繰り返す、って言う処理だけを指示している。 次の Sub CreateButton(cell) で指示されたセル位置にボタンを作る作業をしている。 作るボタンの名前は"chkbtn_"に何番目のボタンかを示す数字1~10が付いたもので、 そのボタンの動作は"CheckButton_Click"で指定されたものになる で、最後の Sub CheckButton_Click() は上で書いたとおり、 そのボタンがクリックされたときの動作を指定している。 つまり、ボタンの名前"chkbtn_"+番号 の番号部分からセルの行位置を割り出して その行の色を塗り替えてるわけ。 だから取り消しボタンを作りたいなら2番目のプロシージャに取り消しボタンを作る処理を追加して、 3番目と同様に取り消しボタンの動作を指定する4番目のプロシージャを書き足す作業をすれば良いんだよ。 これだけ説明されて分からないなら、多分今の貴方には作れないと思うよ
261 名前:253 mailto:sage [2012/02/18(土) 13:51:56.14 ] って俺が長々説教かいてる間に >>258 さんがコード作ってくれちゃったね。 >>257 良かったな。 でもこういうのただ丸投げするより 動作原理を理解して自分でいじれるようになった方が良いから 自分でもがんばってね
262 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 14:07:08.52 ] >>258 一部修正必要だけど、257には無理かもね
263 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 14:24:35.19 ] Application.Caller ってボタン名というかオブジェクト名しか取れないのが使いにくいけど、 あらかじめ Dictionary 使ってオブジェクト名をキーにして情報格納しておけば、 ボタンクリックでオブジェクト名から数字だけを切り出すまでもなく、 座標やチェック/クリアの属性なんかも関連付けできるようになるのでいろいろ応用は効く
264 名前:253 mailto:sage [2012/02/18(土) 14:34:40.85 ] 今更だけど>>260 に間違いがあったので修正 >作るボタンの名前は"chkbtn_"に何番目のボタンかを示す数字1~10が付いたもので、 は1~10じゃなくてそのボタンの行が入ってる。最初のボタンがD5だから5~14になるね >>262 あ、ほんとだ塗りつぶしボタンと取り消しボタンに同じ名前指定してるね とりあえず btn.Name = "chkbtn_" & cell.Row の部分も If check Then の中に入れて条件分岐で名前変えるのが早いかな 取り消しは"clrbtn"とかだね
265 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 14:47:53.44 ] >>264 いやオブジェクト名は、どのみち影響しないけど 修正したいと言うと予想されるのはキャプションのほうね
266 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 17:18:24.54 ] こんにつわ alt+F11押したらVBAProjectパスワード、要求されたんだけど、へるぷみー
267 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 17:29:55.96 ] 事故解決下
268 名前:デフォルトの名無しさん [2012/02/18(土) 23:05:13.47 ] Excelで「平成1年」を「平成元年」と表示させるための一番簡単な方法はなんですか? ちなみに昭和や平成の他の年もいっぱいまざっています。
269 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:20:54.49 ] Replace(s, "平成1年", "平成元年")
270 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 00:13:58.80 ] > 昭和や平成の他の年 の考慮が漏れてるではないか。
271 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 00:20:14.51 ] [^0-9]1年
272 名前:268 [2012/02/19(日) 00:58:11.82 ] >>269 でかした! >>270-271 どういうこと?
273 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 03:27:02.71 ] 風邪で寝込んでて暇だからやってみた。バグがあるかもしれんから取扱注意。 年だけの場合 Public Function 元年変換From年(paramValue As String) As String Dim i As Integer, yearValue As String 元年変換From年 = paramValue For i = 1 To Len(paramValue) If Mid(paramValue, i, 1) Like "#" Then yearValue = Mid(paramValue, i): Exit For Next i If Val(yearValue) = 1 Then 元年変換From年 = Replace(元年変換From年, Val(yearValue), "元") End Function 年月日の場合 Public Function 元年変換From年月日(paramValue As String) As String Dim paramDateValue As Date paramDateValue = DateValue(paramValue) 元年変換From年月日 = Format(paramDateValue, "ggg") & IIf(Format(paramDateValue, "e") = 1, "元", Format(paramDateValue, "e")) & Format(paramDateValue, "年m月d日") End Function ※ 年月日の方であり得ない日付(平成1年1月1日など)を入れると本来の日付(昭和64年1月1日など)に変換される。
274 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:24:27.04 ] >>272 >>269 では誤動作するケースがある、というのは分かる? 経験があれば、真っ先に>>270-271 のようなことが浮かぶもんだよ。
275 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:39:48.49 ] Excel上での表示の話なんだから… 「Excel 1年 元年」でググってみ。いろいろやり方があって面白いよ。 第1位に出てる、セルの表示形式を [<32516]ggge"年"m"月"d"日";[>32873]ggge"年"m"月"d"日";"平成元年"m"月"d"日" にしろってヤツ、いかにもExcel臭いがCool…なのかなw 自分的には、文字列にしてから置換する方が好きだ。
276 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 07:14:45.79 ] 元号使わなきゃ無問題
277 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 07:17:24.42 ] >>275 VBAスレでセルの表示形式の回答?
278 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:10:34.97 ] 今特別養護老人ホームに勤めていて、頭を使って手書きで勤務表を作っています ExcelのVBAで自動で勤務を割り振ってくれる勤務表は作れますか?
279 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:11:32.23 ] 特定のファイルの追加、削除の監視をDO〜LOOPで行おうと思うのですが、 監視を任意のタイミングで終了させるにはどうしたらいいでしょうか?
280 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:19:38.11 ] >>278 作れる。簡単ではないけど。 コツコツやって具体的にわかんない部分が出たらまた来ればいい。 >>279 終了フラグを用意して、DO〜LOOP前でクリアDO〜LOOP内でチェック。 終了ボタンなどで終了フラグを書き換える。
281 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:21:42.39 ] >>279 Exit Do
282 名前:279 mailto:sage [2012/02/19(日) 11:30:53.47 ] 早速のレス、ありがとうございます。 ループ中に終了ボタンって押せるんでしょうか? UserFormにスタートボタン、終了ボタンを置いてテストしてるんですが、 ループ中は終了ボタンが押せません。 フォーカスを終了ボタンに移すこととかってできるんでしょうか? ループ中でもボタンを押すにはどうすればいいんでしょうか? よろしくお願いします。
283 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:35:10.73 ] >>282 DO〜LOOP内、各行前後にDoEvents入れて見。 足りなそうなら増やして見。
284 名前:279 mailto:sage [2012/02/19(日) 11:38:53.91 ] >>283 できました。 ありがとうございました。
285 名前:デフォルトの名無しさん [2012/02/19(日) 16:29:31.34 ] Do〜LOOP使うならWhile使えよ
286 名前:デフォルトの名無しさん [2012/02/19(日) 18:01:02.40 ] そーいえばどっかで平成が何年までか求めるコードがあったな
287 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:45:33.02 ] >>286 > 平成が何年までか求める 宮内庁から怒られるんじゃないのか…
288 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:17:04.08 ] 今年で,,,, ゲフンゲン
289 名前:278 mailto:sage [2012/02/19(日) 19:36:06.20 ] >>280 ありがとうございます、コツコツやってすぐ分からなくなってまた来ます その時は教えて頂けたらありがたいです
290 名前:デフォルトの名無しさん [2012/02/19(日) 19:52:21.66 ] こちらでも質問させてください。 会社では2010、家では2003を使用して「終了」ボタンを押すと「終了」する VBAを作成しています。Webページとして保存した場合、ボタンを押しても 起動しません。Webページとしてボタンを押せるようにするには Sub () Dim rc As Long rc = MsgBox("○○を終了しますか?", vbYesNo + vbQuestion) If rc = vbYes Then Application.Quit Windows("ファイル名.xls").Close True Else MsgBox "いいえが選択されました。", vbExclamation End If End Sub としてどこを変更すれば良いでしょうか?
291 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 20:16:12.70 ] 堂々とマルチ宣言 時代変わった? w
292 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:47:40.35 ] こんにつわ、質問です。 With ActiveSheet.QueryTables.Add(Connection:=で、Web上のテーブルを取り込んだのですが、このテーブルの指定セルだけを取り込むにはどうすれば良いですか?
293 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:20:17.56 ] >>289 勤務表作成なら興味があるので手伝ってもいいですよ ただプロバイダが2ちゃんで書き込み禁止になることがよくあるので 書けるときだけですが とりあえずググって見ましたか? 自分の業務で自分だけが使うのなら作りやすいのですが 自分の異動など他の人に業務を任せることも考えると 画面デザインが重要になりますね
294 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:25:53.88 ] すいません、多分超簡単なんでしょうけど質問させて下さい 最近VBAを勉強し始めましたのですが、あるセルを基点(仮にA5)としてそこから左端にアクティブセルを移動した後、 仮にAA,AAAと言う文字が来たら、そのセルから右に5列の場所にaa、 BB,BBBと言う文字の場合はbbと言う文字を、それ以外の場合はメッセージボックスにccとでるようにして、 その後一行下に移動して、上記の作業を仮に10回繰り返していき、最後はA1にアクティブセルを移動させると言う問題があったのです。 それを変数を使って解くというようなことがあったのですが、 sub () Dim z As String , i As Integer Range("A5").Select For i = 1 To 10 Step 1 z = ActiveCell.Value Select Case z Case = "AA","AAA" ActiveCell.Value="aa" ActiveCell.Offset(0,5) Case ="BB","BBB" ActiveCell.Value="aa" ActiveCell.Offset(0,5) Case else MsgBox"cc" End Select ActiveCell.Offset(1,0) Next i Range("A1").Select End sub としたのですが、うまくいきませんでした。どこが間違ってるのか自分ではわからなかったので教えて下さい こんな初歩的な質問でスイマセン・・・