1 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:34:58 ] 過去スレ 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/
151 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 18:15:01 ] どなたかお願い致します。 フォーム上で、textbox(技術検索番号)に入力した番号をシート(全データ)のB列から検索し、シート内の番号と 同じ行の各種データをフォーム上の対応したtextboxに返すというプログラムを作成しています。 以下のプログラムは書いてみたんですが、実行すると既に選択されているセルの情報ばかり返ってきます。 番号と一致したセルをアクティブにすればいいかなと思ったんですが…いまいち分かりません。 宜しくお願い致します。 Private Sub 技術検索ボタン_Click() Dim sn As String Dim sa As Range '検索番号とエリアの設定 sn = 技術検索番号.Value Set sa = Sheets("全データ").Range("B4").End(xlDown) '検索の処理 With Sheets("全データ") Set found = Worksheets("全データ").Cells.Find(sn, , xlValues) '見つからない場合の処理 If found Is Nothing Then MsgBox ("技術コードが見つかりません。") '見つかった場合の処理 Else Me.会社名表示.Value = Cells(ActiveCell.Row, 4) Me.処理機郵便番号表示.Value = Cells(ActiveCell.Row, 5) Me.処理機住所表示.Value = Cells(ActiveCell.Row, 6) Me.電話番号表示.Value = Cells(ActiveCell.Row, 10) Me.メールアドレス表示.Value = Cells(ActiveCell.Row, 9) Me.事業区分表示.Value = Cells(ActiveCell.Row, 11) End If End With End Sub
152 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 18:39:31 ] >>151 ActiveCell.Row を found.Row へ変更
153 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 18:39:40 ] >>151 動作確認してないけど、こうじゃないかな Me.会社名表示.Value = Cells(found.Row, 4) Me.処理機郵便番号表示.Value = Cells(found.Row, 5) Me.処理機住所表示.Value = Cells(found.Row, 6) Me.電話番号表示.Value = Cells(found.Row, 10) Me.メールアドレス表示.Value = Cells(found.Row, 9) Me.事業区分表示.Value = Cells(found.Row, 11)
154 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:01:32 ] >>152 >>153 お二人ともありがとうございます! 実行してみたところ、正常に動きました。 ちょっと感動しました。 違うシートがアクティブ(実際"全シート"は隠します)な時にも検索 できるようにしたいしたいので、ちょっと模索してきます。 わからなかったらまた質問させてください。 ありがとうございました。
155 名前:デフォルトの名無しさん [2010/01/31(日) 19:22:10 ] >>154 今のままで、できるんじゃないかい?
156 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 20:06:09 ] >>155 他のシート(セルも)がアクティブになっていた場合なんですが、 なぜかtextboxに値が出てきませんでした。 ’見つからない場合の処理’は出来てたんですが… なので確実にするためにシートを定義してActivateしました。 ご指摘ありがとうございます。
157 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 20:16:26 ] >>156 With Sheets("全データ") があるんだからそれを活用して Me.会社名表示.Value = .Cells(found.Row, 4) のように Cellsの前に ドットをつける
158 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 20:36:15 ] >>157 さっき自分でやった方法と違い、フォームの後ろで シートが切り替わらなくても検索できました! 感謝します。 と同時にもう少し勉強が必要だと痛感しました…
159 名前:デフォルトの名無しさん [2010/02/01(月) 03:47:36 ] エクセル2007.XP. 質問です。よろしくお願いします。詳しい方ぜひ教えてください。 VBAによるあるサイトの自動ログインについてです。 よさげなサイトを発見してためしてみたのですがよくわかりませんでした。 ttp://kikky.net/pc/vba_autologin.html このプログラムの途中にかいてある下記の意味がわかりません。 'form.id部分はサイトのソースに合わせる 'form.password部分はサイトのソースに合わせる 'form部分はサイトのソースに合わせる 解る方いたらおしえてください。よろしくおねがいします。 また、使用例としてyahooでの自動ログインのやり方を少しおしえていただきたいのです、 すみませんがよろしくお願いします。
160 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:10:06 ] ttp://www.ken3.org/cgi-bin/group/vba_ie.asp
161 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 10:34:29 ] >>156 foundはRangeオブジェクトなんだから、わざわざ行番号を取得する必要はない。 行番号を取得するプログラムのほとんどは回り道の欠陥プログラムだ。 Me.会社名表示.Value = .Cells(ActiveCell.Row, 4) なんてしないで Me.会社名表示.Value = found.Offset(,2).Value とすればよい。
162 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 10:36:09 ] 間違った。 Me.会社名表示.Value = .Cells(founfl.Row, 4) なんてしないで Me.会社名表示.Value = found.Offset(,2).Value とすればよい。
163 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 18:34:00 ] >>162 offsetも一度検討してたんですが、その時もActiveCellで考えてました。 ありがとうございます。 >行番号を取得するプログラムのほとんどは回り道の欠陥プログラムだ。 大変参考になりました!頭に叩き込んどきます
164 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:50:34 ] ログインが必要なファイルサーバにファイルをコピーしたいのですが ファイルサーバへの接続が上手くいきません。 どなたかアドバイスお願いします。
165 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:00:24 ] ttp://www.moug.net/faq/viewtopic.php?t=46965&sid=35bd0a78b60e9ce710a0ff9baaf11ef4
166 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 19:34:59 ] >>163 欠陥プログラムなんて事は無いから真に受けない方が良いよ。
167 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 20:12:59 ] 自分も 回り道であるかもしれないけれど 欠陥プログラムは言い過ぎだとおもう さぞかし >>161 は、綺麗なコードを書いているのだろうね プロ(笑)なプログラマの言う事は理解できん
168 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:10:19 ] >>167 別に俺はプロじゃねーし。 まぁプロが行番号なんか使ってたら俺ら素人に笑われるわな。
169 名前:デフォルトの名無さん [2010/02/03(水) 15:39:54 ] html 用の色指定 #FF00FF とか #EE82EE を VBA用にRGB(250,0,250)の形式に変換したいが、 どんな関数をつかえばいいの?
170 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 15:44:56 ] えっ
171 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:35:01 ] 何をしたいのかわからないけど 16進数を10進数にする
172 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:57:32 ] CLng("&H" & Value)
173 名前:デフォルトの名無さん [2010/02/03(水) 22:52:54 ] >172 謝謝、男毛先
174 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 08:15:25 ] >>168 データベースの2次元配列構造を使用する時には、 range.row や range.column を多用するぜ。 と言うか、可読性や速度を考えても、遠回りじゃなくて直線的なロジックだよ。 列は固定で行は変動する場合とかね。 for i = 1 to range.row なんかも欠陥プログラムって言われてる?
175 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:05:09 ] >>174 >>168 じゃないが rangeオブジェクトから行番号や列番号なんてただの数値を取り出して、その数値をもとにどこのブックのどこのシートのCells(*,*)なんて実行時バインドで参照を作り出すのはアホだな Rangeオブジェクトならどこのブックのどこのシートかなんて内包されてるんだから、それを利用するのが当然だろう for i = 1 to cells(rows.count,1).end(xlup).row なんてのは欠陥というより下手くそだね セレクトするコードと目くそ鼻くそだよ
176 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:32:43 ] >>175 目くそ様乙であります!!
177 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 18:08:46 ] >>175 引用間違ってるよ。
178 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:24:30 ] 使い捨てのマクロでそんなことにこだわる必要はないが 他人にも使わせるツールなら意識して欲しいかな しかし、>>151 の内容はVBAの必要なくね? ワークシートにVLOOKUPで十分
179 名前:151 mailto:sage [2010/02/04(木) 22:40:26 ] >>178 たしかに今考えればいならいような気がします…
180 名前:151 mailto:sage [2010/02/04(木) 22:48:16 ] 連投すみません。 さっき、いらないような…と言いましたが、番号が見つからない場合に MsgBoxでエラーを出したかったんです。 それと、VBAで書きかったっていうのがありまして。
181 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:52:53 ] >>178 他人に使わせるだけのマクロなら汚くてもいいんじゃない? 分る人にソース見られたとき困るだけ。
182 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 05:12:07 ] 個人的には lookup系は使わずVBA それ以外はセル操作で出来るのなら極力 VBAを使わないというのが好き
183 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:44:05 ] >>151 にVLOOKUPはないね。 使い捨てブックならかまわないけど。
184 名前:デフォルトの名無さん [2010/02/05(金) 11:49:35 ] 下記で右辺のRGBでコンパイル・エラーargument not optionalがでて 進めません。(XP + Excel2000) Sub Test() Dim myIndex As Variant Dim length As Integer myIndex = Array("235,180,200", "255,110,80", "255,0,0") For i = 0 To 2 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 50 * i, 100, 50 * (i + 1)).Select Selection.ShapeRange.Fill.ForeColor.RGB = RGB(myIndex(i)) 'error Next i End Sub
185 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 13:21:40 ] >>184 文字列を渡してどうする
186 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:18:11 ] >Cells(*,*)なんて実行時バインドで参照を作り出すのはアホだな まじか。 俺はOffsetはその値に達するまで内部でループするから遅いだろうと考えていた。 たとえば、 L = 60000 Offset(L)は6万回ループするが、 Cells(L, 0)なら一発でその場所に移動できるのだと。
187 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:18:21 ] >>184 もっと良いやり方があるかも知れないけれど 現在のコードを尊重する形で考えてみた 下記ではどうでしょう Sub Test() Dim myIndex As Variant Dim length As Integer myIndex = Array(Array(235, 180, 200), Array(255, 110, 80), Array(255, 0, 0)) For i = 0 To 2 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 50 * i, 100, 50 * (i + 1)).Select Selection.ShapeRange.Fill.ForeColor.RGB = RGB(myIndex(i)(0), myIndex(i)(1), myIndex(i)(2)) Next i End Sub
188 名前:デフォルトの名無さん [2010/02/05(金) 23:24:09 ] >>187 ,185 ありがとう。こうしました。 Sub Test() Dim myIndex As Variant Dim length As Integer myIndex = Array(RGB(235, 180, 200), RGB(255, 110, 80), RGB(255, 0, 0)) For i = 0 To 2 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 50 * i, 100, 50 * (i + 1)).Select Selection.ShapeRange.Fill.ForeColor.RGB = myIndex(i) Next i End Sub
189 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:32:22 ] selectしなくてもいいじゃん
190 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 01:43:19 ] >>186 ひどい勘違いだな 内部でループなんかするわけないじゃん とにかくCellsを多用するコードは不細工だ 事前バインドの方が楽で簡潔
191 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 07:54:23 ] DBをExcelに展開して作業するんだけど、offsetだけじゃ無理。 cells(foundcell.row,1).value とか普通に使ってtる。
192 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 08:27:51 ] 参照設定
193 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 08:34:39 ] なんだか、アーリーバインディングを勘違いしてる奴が居るな。 難しい言葉を使おうとしなくていいんだよ。
194 名前:デフォルトの名無しさん [2010/02/06(土) 09:56:19 ] Range.CopyFromRecordset
195 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 10:15:47 ] >>193 勘違いしてねーよ。 アーリーバインディングの方がコーディング楽だろ? お前Cells使ってるのか?
196 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 16:57:38 ] ログデータから取得したリストがあり、頭に種別を表す連番1〜16が振ってあります。 このリストを上からチェックしていき、種別番号が1ならA列から始まる表に、2ならD列から始まる表に という具合に、種別ごとの表に落とし込みたいと考えています。 それぞれの列に落とし込むことはできたのですが、貼り付ける行が前の列からの続きになってしまい悩んでいます。 具体的には、A1〜A10が種別1、D1〜D5が種別2、G1〜G10が種別3としたいのに、 A1〜A10が種別1、D11〜D15が種別2、G16〜G20が種別3となってしまうのです。 If hantei = 1 Then Range("A" & i + 100).Formula = (参照式)
197 名前:196 mailto:sage [2010/02/06(土) 17:04:34 ] すみません。途中で書き込んでしまいました; それぞれの種別表の頭を揃えるには、どうしたら良いでしょうか? 今のところ、それぞれの表でソートをするしかないのかと考えていますが、 状況によりログのリストがどれぐらいの長さまで伸びるか読めないため、 かなりの幅を持たせないといけないので、その表の直下を使えなくなってしまうのが難点です。 何か良い方法があれば、よろしくお願いします。
198 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:06:27 ] 今、画像の表示(サムネイル一覧)や変換(BMP→tiffなど)するソフトを VBAで作ることを考えています。 画像の表示は、ともかく変換をどうすれば良いか検討がつきません。 アドバイス何か頂けないでしょうか? OS:WindowsXp Excel:2000
199 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:25:22 ] >>196 Range("A65536").End(xlUp).Select
200 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:59:03 ] >>199 2007から行数変わったじゃん
201 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 20:24:51 ] 行数、列数が拡張されたのは2007の時だけじゃないし Rows.Countでそのシステムの最大行数が求まる
202 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 02:14:42 ] フォームに入力された値で数値計算をするプログラムを組んでいます。 ’各テキストボックスが空欄だった時の対処 If Me.YJ1.Value = "" Then MsgBox("空欄があります。") ElseIf Me.YJ2.Value = "" Then MsgBox("空欄があります。") ElseIf Me.YJ3.Value = "" Then MsgBox("空欄があります。") ・ ・ ・ (YJ23まで) ’(空欄対処の続きで)各テキストボックスが数字以外だったときの対処 ElseIf IsNumeric(YJ1) Then MsgBox("半角数字で入力してください。") ElseIf IsNumeric(YJ2) Then MsgBox("半角数字で入力してください。") ElseIf IsNumeric(YJ3) Then MsgBox("半角数字で入力してください。") ・ ・ ・ (YJ23まで) Else sum_t = YJ1*0.15+YJ1+0.79+ …(YJ23まで) という風なプログラムを現在組んでいます。 空欄の検出はしてくれるんですが、YJ23まで半角数字なのに"半角数字で…"のエラーが出ます。 半角数字以外ならスペースや空欄などもすべてエラーとして吐き出してくれるにはどうしたらいいですか?
203 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 03:10:19 ] ttp://homepage1.nifty.com/rucio/main/technique/InputChk2.htm
204 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:20:15 ] >>203 ありがとうございます!参考にさせてもらいます!
205 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 06:26:06 ] >>195 やっぱり勘違いしてるね。
206 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 07:03:38 ] しつこいやっちゃなぁ。 実行時バインドのコードばっか書いてる三流プロか?
207 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 08:07:23 ] 190のcellsは不細工で事前バインドが云々の解説でもしておくか。 配列とかはおいといて、単純に範囲をループする場合の実行時バインドと事前バインドの一例 もっとも不細工(cells(i,1)の形が実行時バインド) dim i as long For i = 1 To cells(rows.count,1).end(xlup).row If cells(i,1).value="foo" then cells(i,2).hogehoge end if Next i まだまだ不細工(Itemプロパティが実行時バインド) dim r as range dim i as long set r =range(cells(1,1),cells(rows.count,1).end(xlup)) for i=1 to r.count If r.item(i,1).value="foo" then r.item(i,2).hogehoge end if next i 上の二つよりまとも(cは事前バインド) dim r as range dim c as range set r =range(cells(1,1),cells(rows.count,1).end(xlup)) for each c in r if c.value="foo" then c.offset(,1).hogehoge end if next c
208 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 08:10:50 ] 言っとくけどCellsは事前バインドだが、Cellsの後ろに隠れてるItempプロパティ(実際は_Dedaultプロパティ)が実行時バインドね。
209 名前:デフォルトの名無しさん [2010/02/07(日) 08:14:34 ] Selectionを使うのは実行時バインド?
210 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 08:17:38 ] (cは事前バインド)は(cもOffsetも事前バインド)だった。
211 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 08:23:01 ] >>209 Selectionをそのまま使えば実行時バインドだよ。 ただしSellectionを任意の変数(たとえばセル範囲ならRange型の変数)に格納してその変数を使えば事前バインド。
212 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 09:27:36 ] 不細工云々はどうでも良いんだけど、 column固定でrowはfoundcellの場合、どうすりゃいいんだよ。
213 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:58:03 ] >>212 161じゃないけど、発見した行の4列目ならfound.EntireRow.Cells(4)ってことかな? しかしまぁ>>151 は検索範囲がB列と書いていながら、実際のコードは何故か Set found = Worksheets("全データ").Cells.Find(sn, , xlValues) と全セルになってるな。
214 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:09:02 ] >>151 をよく見ると心配な点がいっぱいあるね。 技術検索番号ってまさか単純な数字じゃないだろうな。 LookAt:=xlWholeを書いてないと1で10とかも引っ掛かるかるしなぁ。 Withも意味なしてないし。
215 名前:151 mailto:sage [2010/02/07(日) 13:58:07 ] >>214 技術検索番号は今のところ10001〜10165までの数値です。 おっしゃるとおり10でも10001が検索されてしまっていました。今現在は、皆さんの意見を参考にして Private Sub 技術検索ボタン_Click() Dim sn As String '検索番号の設定 sn = 技術検索番号.Value '検索の処理 With Sheets("全データ") Set found = Worksheets("全データ").Range("B:B").Find(sn, , LookAt:=xlWhole) '見つからない場合の処理 If found Is Nothing Then MsgBox ("技術コードが見つかりません。5桁の数字を正しく入力してください。") '見つかった場合の処理(フォーム上のtextboxに値を代入) Else Me.会社名表示.Value = .Cells(found.Row, 4) Me.処理機郵便番号表示.Value = .Cells(found.Row, 5) Me.処理機住所表示.Value = .Cells(found.Row, 6) Me.電話番号表示.Value = .Cells(found.Row, 10) Me.メールアドレス表示.Value = .Cells(found.Row, 9) Me.事業区分表示.Value = .Cells(found.Row, 11) End If End With End Sub としています。特にエラーは出てないんで、大丈夫そうなのですが… もし何かありましたら宜しくお願いします。
216 名前:196 mailto:sage [2010/02/07(日) 14:54:05 ] >>199 ありがとうございます。 End()を使ったことがなかったので少し手間取りましたが、希望通りの動作をしてくれました。
217 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:48:43 ] >>215 みなさんの意見って>>161 の意見は参考にしてないなw まぁここに限らずよくない方法が採用されるのが掲示板の常なのでしょうがないね。 しかしどうしても行番号使うにしても、5回も同じ行番号を取得しちゃいかんぜよ。 何度も使うものは変数に格納してから使わないと。 参考までに行番号は取得しないで列番号をそのまま使うならこんな方法もある。 Else以下だが Set found =found.EntireRow.Cells Me.会社名表示.Value = found(4).Value Me.処理機郵便番号表示.Value = found(5).Value Me.処理機住所表示.Value = found.Row(6).Value Me.電話番号表示.Value = found(10).Value Me.メールアドレス表示.Value = found(9).Value Me.事業区分表示.Value = found(11).Value 実行時バインドになるが、Offsetと違って列番号がそのまま使える。 found(4)はfound.Item(4)の略ね。 またSet found =found.EntireRow.Cellsの部分は同じ変数に代入するのがお行儀が悪いって人も稀にいるけどな。 気になるなら別の変数にすればいい。
218 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:54:31 ] おっとfound.Row(6).Valueは間違いね。
219 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:05:40 ] >>207 お前、オブジェクトとプロパティが良くわかってないだろ
220 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:27:49 ] またへんなのが出てきたな。↑ 例えばCellsはRangeオブジェクトへの参照を返すプロパティーさ。
221 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:30:59 ] >>219 は自分は何でも分ってて、他人は分ってないと思ってる基地外だな。 もういいから引っ込め。
222 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:50:57 ] 取り込み中のところすんませんけど、一つ教えてください Excel2007 MsgBox "〜" ←このメッセージの部分の文字に色を付けて表示したりする事って出来ますか?
223 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 22:14:11 ] 出来ないと思う。 www.h3.dion.ne.jp/~sakatsu/ktMsgBox_Syntax.htm ここのアドインを試してみたら?
224 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 22:31:05 ] >>223 教えていただき、有難うございます! 調べてみます。
225 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:34:38 ] 俺はVBAは結構できると思っていたが実行時バインドとかまったく意識していなかった。 今日は勉強になった。
226 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 00:36:40 ] >俺はVBAは結構できると思っていたが 多分激しく勘違いしてるんだと思ふ。
227 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 06:30:55 ] 俺も仕事でVBAを4年ほど使ってるけど、まだまだ知らない事が多いんだなぁ。 とつくづく感じた。 VBAが馬鹿にされてるんじゃなくて、俺が馬鹿だったんだ。
228 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 08:19:12 ] 事前バインドは実行時バインドより速いって認識でいいの?
229 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 09:11:46 ] >>228 大体そうだが逆もある。 たとえばRange("A1")とCells(1,1)は1個の処理なら実行時バインドの後者が速い。 ただWithでくくって多くの処理を行うのであれば事前バインドの前者が速いけどな。 速い遅いより、事前バインドならピリオド打って頭の数文字を打てばその打った 文字から始まるメンバが出てくるから、そこから選べばいいから長いメンバ名のときは楽だな。 だからWith Selectionとして多くの処理をするより、適合する型の変数にSelectionをセットして With 変数とした方が楽だよ。
230 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 09:15:32 ] 上のピリオド云々はVBEのオプションの自動メンバ表示にチェックがついてるときの話ね。
231 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 09:58:19 ] いい加減、お前うざいよ
232 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:00:06 ] 同意。 バインドヲタ・・・イラネ
233 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:02:22 ] 別にうざくはないが
234 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:04:01 ] >>220 で、何を何に「バインド」すんの?
235 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:23:30 ] VB(A)の世界では、Dim a As Rangeなどと、変数宣言時にオブジェクトの型を指定するのが 事前バインディング、Dim a As Objectと総称型で宣言し、Set a = ...と実行時に変数に結びつけるのが 実行時バインディングというのが普通で、上で言われてるような文脈で使われるのは 初めて見た。 あってるのか、間違ってるのか知らんけど。
236 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:27:45 ] ちなみに、コンパイルする言語では、コンパイル時に呼び出しを決定できるものが事前バインディングで、 実行時にしか決定できないものを実行時バインディングという。 付け加えると、VBAでは一般に事前バインディングの方が速いというのはその通りで、 オブジェクトを変数に代入しておいて使う方が速いというのもその通り。 ただ、「Selectionをそのまま使えば実行時バインドだよ。」という言い方は初めて見た。 このような使い方をするのかどうかは知らない。
237 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:42:24 ] 測ってみればいいのに。基本は実測だよ。 For i = 0 To 100000 ' ここにコード Next s = Range("A1").Value => 1416ms s = Cells(1, 1).Value => 670ms s = r.Cells(1, 1).Value => 858ms '事前にdim r as range, set r = range("A1")を実行 結論: Cells(x, x)を使わない奴は馬鹿。
238 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:45:58 ] それやってないけど、r.valueが最速だろ。
239 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:05:58 ] つーか、>>207 で最後のコードが速いのは、事前バインドなんか全然関係なくて、 cells(i,1)でrangeオブジェクトを参照するより、for cell in rangeで参照した方が速いってだけじゃね?
240 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:14:44 ] 古いPCだが 11sec: s = Range("A1").Value 05sec: s = Cells(1,1).Value 04sec: s = r.Value
241 名前:151 mailto:sage [2010/02/08(月) 12:22:11 ] 横からすみません。分かりにくい点が多数あると思いますがお願いします。 A B C D E l F 1 名前 りんご バナナ みかん ブドウ l 余り 2 たけし 1 0 0 4 l 0 3 ともこ 0 2 0 4 l 0.25 4 とおる 1 2 3 0 l 0.73 5 さちこ 1 2 0 0 l 0 6 たける 0 0 0 4 l 0.84 ・ ・ ・ というような表を作っています。 フォームでりんごを選択し検索すると、りんごを食べれる【たけし・とおる・さちこ】 を検索(B2:E6から1を検索)し、与えます。 余りがあればさっき与えた人以外のところに持っていき、与えます。 それを繰り返して、条件付き組み合わせのような形で検索したいと思っています。 この場合ですと、リンゴを100個持っているとすると、 ※()内は残個数 ・たけし(0) ・とおる(73)→たけし(0) ・とおる(73)→さちこ(0) ・さちこ(0) の4パターンが検索されます。 各パターンで残個数が0になれば検索終了です。 このようなシステムは可能でしょうか? また、可能ならヒントを頂けると嬉しいです。宜しくお願いします。
242 名前:151 mailto:sage [2010/02/08(月) 12:40:38 ] ちなみに、 りんご=1 バナナ=2… という関連付けはすでにしています。
243 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:48:45 ] >>239 >>207 で速さのことなんか何にも書いてないじゃん。 不細工かどうかだろ?
244 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 13:57:49 ] >>241 他人に上手く説明できないことは、自分でも理解していないことである
245 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 14:20:57 ] エスパーの出番だな
246 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 15:11:09 ] 概してExcelに検索処理をさせることが間違いのもと
247 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:12:59 ] >>241 ようするにナップザック問題の亜種だろ リンゴが99個で最初にとおるを選んだとき、残りの個数は割り切れない数になるけど、そういう時はどうすんの?
248 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:47:16 ] >>247 ここではリンゴとしましたが、実際はトン(t)で計算します。 小数点以下も考えるので、99×0.73=72.27(t)が次の人へ…となります。 説明不足でした。申し訳ありません。 ナップザック問題というヒントを参考にさせてもらいます。
249 名前:デフォルトの名無さん [2010/02/09(火) 00:19:12 ] 下記test1で「あ」を図の真ん中に表示したい。 test2では文字をとりだせない。 Sub test1() ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 50, 50).Select With Selection .Characters.Text = "あ" End With Range("a1").Select End Sub Sub test2() MsgBox ActiveSheet.Shapes(1).Characters.Text End Sub
250 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 03:10:36 ] >>249 Sub test1() With ActiveSheet.Rectangles.Add(10, 10, 50, 50) .Text = "あ" .HorizontalAlignment = xlHAlignCenter .VerticalAlignment = xlVAlignCenter End With End Sub Excel任せだと少しずれてしまうのは仕様。 ぴったり中央に文字を出したいときは、背景が透明のテキストボックスを 図形の上に重ねて、座標を自分で計算するしかない。 Sub test2() MsgBox ActiveSheet.Shapes(1).TextFrame.Characters.Text End Sub あと、質問するときはもうちょっと文章を丁寧に書け。 「やりたい」「できない」だけじゃ質問になってない。 テンプレも使うこと。
251 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:55:15 ] >>250 ここにテンプレあったか?
252 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 12:20:13 ] >>251 >>2
253 名前:デフォルトの名無さん [2010/02/09(火) 12:20:50 ] >>250 ありがとうございます。 気をつけます。
254 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:29:32 ] tes
255 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:36:42 ] VBA初心者ですが、実行時バインドってなんですか? また、エクセルで「現在アクティブなブックの一つ前に アクティブだったブックのname」を取得するコードを教えてください。
256 名前:255 mailto:sage [2010/02/10(水) 01:20:39 ] Excel2003 windows xpです。 今まで勘違いして activewindow.activatepreviousで取得していたんですが、 複数ブックが開いているときはだめな時がありました。
257 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 12:36:16 ] ひとつ前のブックをアクティブにしたときに名前取得すればいいんじゃないの?
258 名前:デフォルトの名無さん [2010/02/10(水) 13:42:42 ] 下記(1)で mainをぬけてプログラムを中断したいのですが・・・ Sub main() Call ChkShtName MsgBox Now End Sub Sub ChkShtName() If ActiveSheet.Name <> "xoxo" Then MsgBox "シートは:" & ActiveSheet.Name Exit Sub '(1) ここで本当はmainを抜けたい End If End Sub end sub
259 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 14:12:17 ] >>258 発想がスパゲッティだなw フラグ持ってけ。
260 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 15:01:51 ] For~Next文で、 For i1=… ’ここにi1の処理(※) For i2=… ’ここにi2の処理(※) For i3=… ’ここにi3の処理 Next i3 Next i2 Next i1 と階層化されている場合、各段階で条件によって終了し、i1に戻って再度処理を続けるにはどうしたらいいですか? (i2,i3である値が0になったときなど) ※のところに If a = 0 Then Next i1 ではだめでした。 コード自体が長いのでこのような質問になり申し訳ありません。 よろしくお願いします。
261 名前:デフォルトの名無しさん [2010/02/10(水) 15:41:51 ] goto もしくは関数ごとつくる
262 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 16:16:38 ] i1に戻ったときの、i1,i2,i3の値が気になるが Dim f as boolean f = True For i1=… ’ここにi1の処理(※) For i2=… If f Then ’ここにi2の処理(※) For i3=… ’ここにi3の処理 If (i2,i3である値が0になったとき) Then f = False End If Next i3 End If Next i2 Next i1 どこかでf = Trueをいれないといけないけどね
263 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 16:49:44 ] >>261 >>262 ありがとうございます。ちなみに>>241 で質問した者です。 '果物番号 fruit = Worksheets("sheet1").Range("E10") aRow = 1 aCount = 0 '================================================= For i1 = 2 To 6 '検索する行を指定 '果物番号の検索 With Worksheets("sheet1") Set found1 = Worksheets("sheet1").Range(.Cells(i1, 2), .Cells(i1, 5)).Find(fruit, , LookAt:=xlWhole) End With If found1 Is Nothing Then Else '最初の人の余り(率)を取得して書き込み s1 = Worksheets("sheet1").Cells(found1.Row, "A") ’s1は最初に食べる人 out_rate1 = Worksheets("sheet1").Cells(found1.Row, "G") aRow = aRow + 1 Worksheets("sheet2").Cells(aRow, 1) = s1 '排出物 out1 = Worksheets("sheet1").Cells(i1, 8) '================================================= For i2 = 2 To 6 (以降続く) というプログラムで、i1ではout_rate1=0となれば最初に戻って次のパターンを検索、 i2ではout_rate2=0となれば最初に… という流れを目指して書いたものです。 分かりにく過ぎて申し訳ないです。エスパーさんいらっしゃいましたら宜しくお願いしますw
264 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 00:47:06 ] >>258 元のプログラム構造を尊重した一例。 本当はMsgBoxはどちらか一カ所にすべき。 Sub main() If ChkShtName Then MsgBox Now End If End Sub Function ChkShtName() As Boolean If ActiveSheet.Name <> "xoxo" Then MsgBox "シートは:" & ActiveSheet.Name ChkShtName = False '(1) ここで本当はmainを抜けたい Else ChkShtName = True End If End Function
265 名前:255 mailto:sage [2010/02/11(木) 01:36:07 ] >>257 例えば、現在アクティブなbook2(マクロを登録してあるファイル)の 中のマクロで、ひとつ前にアクティブであった book1(いろいろなファイル)に対して操作を行う時に、 nameが固定されていないbook1をアクティブにする方法です。 それが分からないのでnameも取得できませんでしたが、一応自己解決しました。 丸一日かかってやっと思いついたのが、 「現在アクティブなブックのウインドウを最小化する とひとつ前のブックが自動的にアクティブになる」 というエクセルの動作を利用してみました。
266 名前:255 mailto:sage [2010/02/11(木) 01:49:31 ] もうひとつ質問なのですが、 メニューバーへボタンを作って そのボタンからマクロを実行するアドインを 作って実装させているんですが、 計10台くらいの仲間に実装したのに、 何日かしたら数台のPCでボタンが消えていました。 ツール → アドインで調べてもアドインファイルにチェックは ついたままになっているんです。 ちなみにチェックを外してOKボタンを押すとエラーになりました。 アドインのメニューボタンだけが消えてしまった状態なんですが ボタンをdeleteするプログラムを含むプログラムを 実行していないとしたら、 ほかにどんな原因が考えられるのでしょうか?
267 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 03:05:32 ] >>265 それはbook3もあって一つ前にアクティブだったかわからないという事か? ↓コピペだけど Sub マクロブックでない方のファイル名を取得する() Dim オブジェクト As Workbook For Each オブジェクト In Workbooks If オブジェクト.Name <> ThisWorkbook.Name Then MsgBox オブジェクト.Name End If Next End Sub もし2つしかbook開いていないなら上記で 2つ以上でもアクティブなBOOK名を絶えず取得して置けばいいと思ったけど マクロ書いたbookを最後に開いたら駄目だね
268 名前:255 mailto:sage [2010/02/11(木) 15:25:13 ] >>267 book3,book4,book.......と複数ブックが 開いている状態でbook2(マクロを登録したファイル)をアクティブ にしてその中のマクロを実行するときに ひとつ前にアクティブだった任意のブック(book1 or book3 or ......) をアクティブにする方法です。 activewindow.activatepreviousではウインドウが開いた順番をもとに ひとつ前の番号のウインドウをアクティブにするだけなので、 ひとつ前の番号のウインドウ = ひとつ前にアクティブだったブック とは限らないケースがあり、マクロ実行時に思惑通りの動作を してくれなかったのです。
269 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:45:48 ] >>268 VBA単独でやるなら、すべてのブックにマクロを仕込んで、それぞれ自分がアクティブになったら 名前をどこかに記録しておく、みたいな方法かなあ。 俺ならウィンドウメッセージをフックして、アクティブになったウィンドウを記録するような常駐ソフトを作る。
270 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:55:08 ] そもそも仕様が腐っとる。
271 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:06:54 ] パソコン環境が貧弱な頃から積み上げた成果でしょ
272 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:36:35 ] >>267 自分ならクラスモジュールを使ってブックイベント拾ってやるかな 下記では このマクロを含むブックを開く前に アクティブだったものは取得できないけどひとつのやりかたとして掲載してみる (ネーミングは適当なので勘弁してね) ★標準モジュール Private GetOldBook As New Class1 '←クラスモジュール名を指定する Sub TEST() Debug.Print "一つ前にアクティブだったブック:"; GetOldBook.Name End Sub ★クラスモジュール(モジュール名:Class1) Private WithEvents App As Application Private OldBook As String Private Sub Class_Initialize() Set App = Application End Sub Private Sub App_WorkbookDeactivate(ByVal Wb As Excel.Workbook) OldBook = Wb.Name End Sub Public Property Get Name() As String Name = OldBook End Property
273 名前:272 mailto:sage [2010/02/11(木) 20:42:19 ] アンカーみすった >>268 だったです すみません
274 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:59:02 ] 初歩的な質問ですが、 A1に1、A2に2、B1に3、B2に4と入力されていて A1からB2を選択した状態で下記のコードを実行した場合、 bufは要素数が1から始まる配列になるということで よろしいのでしょうか? 配列なのに何故0から始まらないんですか??? Sub test() Dim buf As Range Set buf = Selection MsgBox buf(2) End Sub
275 名前:274 mailto:sage [2010/02/11(木) 22:08:13 ] IsArray(buf)はTrueを返すんですけど、 LBound(buf)とUBound(buf)は“配列がありません”と コンパイルエラーになってしまいます。
276 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:13:54 ] 自分でrangeって宣言してるんだから 配列じゃなくて、rangeでしょ
277 名前:デフォルトの名無しさん [2010/02/11(木) 22:16:14 ] Sub test() Dim buf buf = Selection Debug.Print UBound(buf), LBound(buf) End Sub
278 名前:274 mailto:sage [2010/02/11(木) 22:23:24 ] >>277 これ、エラーになりますよね?
279 名前:274 mailto:sage [2010/02/11(木) 22:25:36 ] あ、失礼しました!Variantだと配列ってことでしょうか? でも、Rangeで宣言してIsArrayでTrueを返すのは どういうことなんでしょう? すみません・・・すごく初心者な質問ばかりで・・・orz
280 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:29:55 ] >>279 あやまる気があるなら自分で調べろ。
281 名前:258 [2010/02/11(木) 22:47:10 ] >>264 ありがとうございます。
282 名前:274 mailto:sage [2010/02/11(木) 22:54:26 ] www012.upp.so-net.ne.jp/scotchegg/ExcelVBA/Range/Value.htm 似たようなもの見つけました。 やはり配列で、最小インデックスは1ということのようですね。 試験でbuf(1)の値は何か?という問題が出て、 配列なら0から始まると思い込んでて間違えたものですから・・・。 お騒がせしました。
283 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 10:49:13 ] 配列とは思って無かったItemを省略した書き方って感じで 下の場合はobj.item(2)と同じ Public Sub ItemTest() Dim obj As Range Set obj = Range("B2:C3, D5") MsgBox (obj(2).Address) End Sub だから最小インデックスは1なのかなと思う
284 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 23:59:10 ] VBAのメソッドやクラスのドキュメントてMSDNにないの? 全網羅してるやつ。。
285 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 02:15:15 ] ある
286 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 18:31:15 ] IEのフォームにセルの値を次々に入力して検索結果を別セルに転記する、というマクロ作っています。 入力内容によっては「Windows Internet Explorer」というタイトルの警告ウィンドウ(ボタンはOKボタンのみ)が 出てしまいます。 このウィンドウを閉じれば次のセルの値は問題なく入力、検索できるのですが、 このウィンドウを閉じるにはどうすればいいでしょうか?
287 名前:286 mailto:sage [2010/02/13(土) 18:46:50 ] 警告ウィンドウが出てるかどうかの判断の仕方もあわせて教えてください。
288 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 19:34:29 ] 逆に質問ですけど、JavaスクリプトでExcelに書き出してるの?
289 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 19:35:42 ] 質問取消します 読間違えました
290 名前:デフォルトの名無しさん [2010/02/13(土) 23:44:55 ] 宜しくお願い致します。EXCEL2000です。 「サンプル写真」という名前のフォルダの中にある、 セルA1に書かれている数字のjpgファイルを開く。 というマクロを何とか作りました↓。 Sub テスト() ActiveWorkbook.FollowHyperlink Address:="C:\Documents and Settings\a\デスクトップ\サンプル写真\" & Range("A1") & ".jpg" End Sub 一応動くのですが、実行するとインターネットエクスプローラで開いてしまいます。 拡張子の関連付けでは、他のソフトで開くようにしいるので、 そのソフトで開けるようにしたいのです。 開くjogファイルを開くプログラムを指定するにはどうすればよいでしょうか? 宜しくお願い致します。
291 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:30:30 ] >>290 homepage1.nifty.com/MADIA/vb/API/ShellExecute.htm
292 名前:290 [2010/02/17(水) 10:04:46 ] >>291 遅レスすいません。アク菌にまきこまれ返信できませんでした。 解決しました。 本当にありがとうございます。 感謝
293 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 11:11:06 ] csvファイルをインポートではなくダブルクリックで開いた場合、 例えば「12-11」というデータは「11月12日(中身は40494)」に変換されてしまいますが、 これをマクロで12-11に戻してやる場合にはどういう方法がいいんでしょうか? ちなみにその列は「数値-数値」の形ではない文字列も含まれていますので、 書式の取得からやらなければいけないと思います… その処理を入れようとしているのは行数分回すfor文の中です。 よろしくお願いいたします。
294 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 11:38:10 ] >戻してやる場合にはどういう方法がいいんでしょうか? 考え方が違う。 EXCELに展開するときに処理することを考えるべし。
295 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 11:45:05 ] >>293 その場合、元のデータが「12-11」だったのか「12/11」だったのか「12月11日」だったのか 判断する方法はないので元に戻すこともできない。 あとから修正するんじゃなくて、最初から別の方法で読み込むこと。
296 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 12:08:17 ] >>293 発想が腐っとる。
297 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 12:19:07 ] >>295 住所のカラムなので日付が入ることはないんです >>296 腐敗しとります
298 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 12:30:10 ] ああ、.textに"月"と"日"が含まれてたらそれぞれの前の数値を抽出して並び替えればいいのか お騒がせしました。ちなみに俺は「取り込むときに処理しないとまずい」とちゃんと提言しましたよ? 腐敗してるんですよ
299 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 12:38:35 ] >>297 そういう重要な条件を後出しするんじゃねえボケ
300 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:06:53 ] >>299 そうですね、ごめんなさい しかし、もし"月"と"日"が含まれている住所が存在するなら >>298 の方法には完全に穴がありますね ところで、 'もし住所2が日付形式に変換されていたら Address2 = Cells(i, 8).Text Cells(i, 8).NumberFormat = "@" If InStr(Address2, "月") + InStr(Address2, "日") <> 0 Then Cells(i, 8).Value = Address2 ここまでは作ったんですが、この後"月"や"日"をReplaceでいじろうとしても うまくいかない…>>123 の問題とかぶってるのかな? 具体的に言うと、"月"を"-"、"日"を""にReplaceしてやるとまた日付形式に 戻っちゃうんです。なんなんだ…泣きそうw
301 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:29:18 ] ああ、 If InStr(Address2, "月") + InStr(Address2, "日") <> 0 ではなくて If InStr(Address2, "月") <> 0 And InStr(Address2, "日") <> 0 Then じゃないとまずいですね。NORが無いのは残念だ
302 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:34:24 ] こうやって糞シートが出来上がっていくんですねw
303 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:35:32 ] >>302 ベストな解答頼む
304 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:48:11 ] 結局どうせごり押しなら Cells(i, 8).NumberFormat = "m-d" で通しちゃうことに決めました これだと日付形式じゃないものはそのままですし >>302 俺からもお願いします
305 名前:デフォルトの名無しさん mailto:sage 釣り針 [2010/02/17(水) 14:52:16 ] Excelは青色申告用ソフトであって住所録じゃないんだからそういう使い方自体が間違ってる
306 名前:302 mailto:sage [2010/02/17(水) 15:40:13 ] >303-304 つ>294-295
307 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:45:56 ] それがベストな解答?
308 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:45:54 ] Excelって青色申告用ソフトだったのか。長年使ってて初めて知った。そういう用途には一度も使った事ねーや w
309 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 21:02:37 ] webクエリで勝手に保存されてしまうアドレス群の中で、不要な物が多すぎるので消したいんだけど何か方法ないですか? VBA使うやり方でも使わないやり方でもなんでもいいです。
310 名前:デフォルトの名無しさん [2010/02/17(水) 22:08:49 ] マクロを実行して 途中でエラーになった場合 VBAの画面が開かれるのですが これを開かずに実行に失敗した事だけを伝えるのってどうすればいいのでしょうか?
311 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:20:11 ] On Error Resume Next とか
312 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:49:24 ] >>308 まあExcelは違うわな パソコンと表計算ソフトの最初の利用目的が税金の計算だったってだけの歴史上の話だから
313 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:50:47 ] >>309 必要か不要かを機械的に判断するロジックがあれば可能 人間が見ないとわからない物は手作業で消すしかない
314 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 00:27:32 ] VBはマイクロソフトが開発したわけではなく 他社が開発したものをマイクロソフトが買収したもの
315 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 08:58:22 ] >>313 レスありがとう、手作業での消し方すらわからんとです。
316 名前:293 mailto:sage [2010/02/18(木) 09:00:40 ] >>305 住所録として使っているわけではありません csvにマクロを適用させるアプリとして使っているのです >>306 だからその案は却下されたんですって言ってるじゃないですか なんだ、がっかりです
317 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 09:14:05 ] >316 >だからその案は却下されたんですって言ってるじゃないですか そうやって例外が例外を産み、糞シートが出来上がっていくのだよ。 >294-296がベストな回答だと思うがな。
318 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:09:40 ] >>317 自覚のない素人に何を言っても無駄 仕事でこんなことやってるってのにはビックリした
319 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:13:05 ] だめだこいつw 293は限定された条件の中でのベストな回答を訊いてるんだろうに。 その条件自体に文句つけてどうする。 サッカーやるのに「手を使えないのがおかしい!」って言ってるのと一緒だ。
320 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:27:11 ] >318 そういうくだらないことやってる会社って結構あるけどなw
321 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:34:38 ] 文字列データを「"」でかこってないCSVをダブルクリックでまともに開きたいってだけでしょ 開いた後で自動なり手動なりでマクロから読み込み直しさせればいいだけじゃないの?
322 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 11:08:39 ] >>312 > >>308 > まあExcelは違うわな > パソコンと表計算ソフトの最初の利用目的が税金の計算だったってだけの歴史上の話だから 都合のいいところでお前のパソコンの歴史が始まったらしいな。 そんな話聞いたこと無いぞ。
323 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 12:22:22 ] パソコンは戦争目的じゃなかったか? 弾道計算か何かだと思う 表計算ソフトは ttp://ja.wikipedia.org/wiki/VisiCalc だとさ。金融がどーとかで税金かどうかまでは分からないが、 まあ似たようなものといえなくも無いが間違ってるとも言える ってかどっちでもいい
324 名前:293 mailto:sage [2010/02/18(木) 13:10:45 ] なんかちょっとだけ盛り上がってますね。すみません >>321 ああ、それがベストですね! ルールを変えろ、って言ってる人は意味がわかりません 変えられない前提だって言ってるのになあ
325 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 13:33:05 ] サッカーボールを手で運べ!
326 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 13:36:52 ] ラグビーの発祥です
327 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 13:57:47 ] なるほど
328 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:13:01 ] どんな書類でもエクセルで作りそうw
329 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:16:17 ] フローチャートをエクセルで作るウチの会社のことだな 俺は個人的なチャートならイラレで作ってるw
330 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:30:58 ] アプリなんてどんな使い方してもいいよ 本来の目的からずれてようが、便利なら使えばいい
331 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:38:19 ] webページから一部分だけエクセルに取り込むコード作りたいんだけど、webクエリだと大きく取り込んでしまうので困ってます。 具体的には、ヤフーファイナンスからコードと社名と業種だけ(他はいらないです)欲しいんだけど、そういうピンポイントで取り出すみたいな事出来ますか? また、そういうデータ取り込み系統の技術を得るための参考書籍とかあったら紹介して下さい。
332 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:59:06 ] >>331 Webクエリなら特定のテーブルだけを取り込むこともできるけど、 ヤフーファイナンスはページ全体が大きなテーブルになってるから一部を取り出すことはできない。 こういう時はページのソースを文字列変数に読み込んで、 タグなどを調べながら必要な部分だけをセルに入れることになる。 あと、やりたいことがピンポイントで決まってるなら書籍よりGoogleで検索した方が早い。 サンプルも必要な部分をコピペするだけだし。
333 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:05:25 ] レスありがとう。 自分が目指してるのは、多分こういう感じのを応用させるんだろうなとは思ってるんだけど(下、動画のアドレス) ttp://www.youtube.com/watch?v=MVsh1XnfYOw だんねんながらVBAスタンダード程度のレベルでは意味不明でしたw
334 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:20:59 ] >>333 その動画サイトからソース置いてあるページにリンク貼ってあるし ダウンロードして改造して使えばいいじゃん。 そのビデオ見てわかんないんだったら、ここで同じこと説明しても やっぱりわかんないんじゃないの? 企業コードが知りたいだけなら、そういう一覧表がきっとどこかにあるはず。 検索してみたら?
335 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 16:45:51 ] >>331 新・ExcelVBAで極めるシステムトレード 〜最強パワーアップ編 正規表現による取得方法を書いてる
336 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 18:44:01 ] >>331 Sub test() Dim URL As String Dim WebTbl As String URL = "URL;quote.yahoo.co.jp/m3?u " ' 読み込むテーブルNoを指定する WebTbl = "4" With ActiveSheet.QueryTables.Add(Connection:=URL _ , Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .WebTables = WebTbl .Refresh End With End Sub ちょっと違うかな?
337 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 19:00:35 ] >>331 ごめんorz ちょっとどころか全然違ったねw
338 名前:デフォルトの名無しさん [2010/02/18(木) 22:19:02 ] VBAでJavaにおけるExceptionみたいなものってあるのでしょうか? つまり何らかのエラーがおこった時点でどのメソッドに強制的に移動するみたいな感じで
339 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:40:22 ] 色々レスありがとう。 エクセル入ってるのが2ndPCなので後でコードコピーして試してみる。 あと、オススメ本は明日本屋で探してみます。 コレで勉強してたんだけど、少し不足を感じてたので助かったわ。ちなみに誤字脱字も多いしあんましオススメしない。 ttp://www.tradersshop.com/bin/showprod?c=9784775990391 ttp://www.tradersshop.com/bin/showprod?c=9784775990513
340 名前:デフォルトの名無しさん [2010/02/19(金) 02:24:55 ] 〜 Range("K" & Rows.count).End(xlUp) みたいにK列を固定させているのですが こう書いた場合Excelのシートを列削除したり追加したりするたびに 書き変えなきゃいけないのですが 列を追加したりすると自動的に変更って出来るのでしょうか?
341 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:40:16 ] >>340 目的の列を探すコードを追加すればいいんでない?
342 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 20:43:17 ] >>340 下記どうでしょう? 案1 Range("K1").End(xlUp).Offset(r, c).Value r, c に増減した行・列の数を代入すると、 移動した先のセルでValueなどRangeの機能を使えます。 案2 ターゲットのセルがsheet1のD1であるとする。 sheet2のセルA1に式"=Sheet1!D1"を記入する。 VBAからは、常にsheet2のセルA1を読む。 例えば、列Bを削除してセルD1がC1に移動した場合、 sheet2のセルA1に記入してある式は、 自動的に"=Sheet1!D1"から"=Sheet1!C1"に変わって追いかけてくれる。
343 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:54:00 ] 初心者質問でごめんなさい for i = 1 to 33 良くある構文ですけど、iの値を16進法で返す事って出来ますか 9の次は10でなくてAで返したいんですけど。
344 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:59:28 ] Hex(i) ってするってこと?
345 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 00:13:19 ] 質問させてください。 Excel2000でSortメソッドを使うVBAコードを走らせているとき、 そのExcelウィンドウをバックグラウンドにすると、Sortメソッドの部分だけが滅茶苦茶遅くなります。 (計測するとフォアグラウンドの時と比べて10倍くらい時間が掛かる) フォアグラウンドに切り替えると高速に動作します。 環境はXPpro、Excel2000で、Core2Duo・Corei7 いずれのPCでも再現します。 パフォーマンスオプションはバックグラウンドサービスに設定しています。 これって仕様なんですかね。Excel2003や2007だと改善されていますか?
346 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:50:57 ] >>344 ありがとうございます。恥ずかしながらHexという関数を始めて知りました。 出来ればストレートに大文字で返して欲しいですけど、これでかなり楽になりました。
347 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 09:09:59 ] >>340 K列またはK列の一番後ろのセルに名前をつければいいんじゃね?
348 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2010/02/20(土) 09:46:08 ] >>340 >>341 もいいね。 行追加がないものとして、列見出しが"日付"だったら Set target = Rows(1).Find("日付").EntireColumn.Cells MsgBox target(target.Count).End(xlUp).Address とか 行追加があるならRows(1)をCellsにでもすればいいだろう
349 名前:デフォルトの名無しさん [2010/02/20(土) 15:59:46 ] セルの計算式を下記のようにして =TEST() 標準モジュール関数TESTを呼出した場合、関数側で 呼出し元のセルの位置を取得するにはどうしたらいいですか? アクティブセルの位置ではなく、関数呼出しの計算式が 書かれているセルを知りたいです。 Windows7、Office2007です。 よろしくお願いします。
350 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:22:21 ] >>349 関数の引数にRow,Column
351 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:24:48 ] ttp://www.ne.jp/asahi/hishidama/home/tech/excel/workfunc.html#Application.Caller
352 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 17:36:52 ] >>350 >>351 ありがとうございます。 Application.Caller と Application.Volatile を使い それらしい動きにはなったのですがセルの再計算時の挙動に 癖がありますね。 別シートをいじってからシートを切り替えると#VALUE!になって しまい、元のシートで再計算しなおしてやらないといけません。 関数を諦めて計算式で全部やる方向も検討してみます。
353 名前:286 mailto:sage [2010/02/20(土) 20:43:44 ] C A B D F
354 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 15:36:41 ] ソートの話が出たので便乗するんだが、 結局、どのソートが一番速く安定性があるのか。。 エクセルのVBA限定の話で、 項目数が100程度の場合、項目数が100,000の場合、ほぼ並んでいる場合、まったくのランダム。 状況によっていろいろあるんだろうが、とりあえずこのソートをよく使うっていうのを教えてくれ。
355 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 16:25:34 ] エクセルのVBA限定の話ならエクセルのソートをまんま使っちゃう 中身がなんなのかは知らんwだれか知ってる?
356 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 17:12:06 ] クイックソート
357 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:27:22 ] 一般機能優秀じゃない? わざわざコードを組むより、一般機能や関数を使った方が早い場合が多い ・・・とどっかに書いてあったw
358 名前:345 mailto:sage [2010/02/21(日) 21:13:08 ] >>345 のような現象は自分だけなのかな? 仕様ならばSortメソッドを使わずにソートするしかない Sortメソッドの場合、常にエクセルをアクティブにしていれば問題ないけど、 エクセルを複数起動して同じコードを並列処理させる場合、 アクティブなエクセルでは問題ないけど 他の非アクティブなエクセルは極端に遅くなってしまう。
359 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:34:43 ] 先月自作のエロ画像処理ツールでクイックソートを使ったよ。 理由は使ったことが無かったから。 ソートのプログラムを書いたのは後にも先にもこれだけ。 DBのorder byとかエクセルの並べ替え機能さえ使えればプログラムで書くことはまず無い。
360 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:37:46 ] >>358 自動計算や画面更新を止めてもおそい?
361 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:43:26 ] 構造体の配列例えば、生徒(学籍番号、名前、身長、体重)を体重で並べ替える場合って 学籍番号や名前や身長も全部入れ替えるの?
362 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:47:48 ] 入れ替えないとデータが壊れるでしょ
363 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:53:47 ] >>362 別の配列に学籍番号だけを取り出して ソートしてもとの配列と紐付けるとかはあり? 学籍番号、名前、身長だけなら入れ替えてもいいけど 他の項目が100個とかあったら大変じゃね?
364 名前:358 mailto:sage [2010/02/21(日) 22:39:11 ] >>360 もともと自動計算も画面更新も止めてます。 Sortメソッドを含むVBAコードがアクティブなエクセル上で高速に動作してる最中に、 デスクトップをクリックしてエクセルを非アクティブにすると、途端に実行速度が十分の一ほどになる。 再度エクセルをアクティブにすると高速に動作する。という状態です。
365 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:08:44 ] XPでExcelは2003を使用しています。 VBA(マクロ)を触りだして3日程です。 ブックA(1日の記録) ブックB(数ヶ月のデータ・縦に日付、横に種類や個数等) ブックAの日付入力箇所に、日にちを打ち込みます(マクロでは無く手打ち) ブックAのデータ入力箇所に、ブックBのデータを引用する為に ブックAを開いた状態で、「マクロを記録する」で ブックBを開き、ブックAに戻り手打ちした日付のセルをコピーして ブックBに移動して、ctrl+Fでコピーした日付を貼り付けて検索 検索した右側に、必要なデータがあるので、キーボードで右側を押して 目的のデータ(種類や個数等)をブックBからブックAにコピーしてペーストを繰り返す (繰り返す理由は、必要なデータが飛び飛びな為と、横に並んでいるのを縦に並べる為) コピペ終わると、ブックBを閉じる。 というマクロを作ってみたのですが 日付を変えて実行してみたり、VBA?を見てみると問題点が沢山ありまして 問題点1、Aで日付をコピーして、Bで検索時にペーストして検索する所で 2010/1/1をコピーして、マクロを作った為か 日付を2010/1/2に変更してマクロを実行しても 2010/1/1で検索した、データを引用してしまう 問題点2、検索した日付の横のデータをキーボードで右側に移動してコピーの部分で VBA?で見てみたところ、単純にあるセルをコピー となっているようなので 日付の問題が解決しても、検索した日付の右側ではなく あるセルをコピーしてしまう為、日付とは関係の無い特定のセルをコピーしてしまう 色々試したり、VBAで見たところ 問題点1は、検索時にコピペした日付では無く、マクロを記録した2010/1/1で検索しているので 日付を変更しても意味が無い?若しくは、検索自体がマクロで出来ない? 問題点2は、キーボードの右等の操作は記録されない 検索ではなく、オートフィルタを使い、特定の日付を1行だけにすることにより 行移動を無くせば解決?
366 名前:365 mailto:sage [2010/02/22(月) 01:09:58 ] 自分がしたい事を簡単にまとめると ブックAに日付を入力後、マクロ実行 ブックAに入力した日付に対するデータを ブックBから引用 日付等は、=today() で入力したいのですが ブックBのデータを引き出す為の、日付の部分が 2010年1月1日が、20100101 となっているので オートフィルタでデータを絞る為にも、20100101 というデータが必要なので 日付は手入力という手段しか無いと思いました 後は、ブックBをオートフィルタで絞りこんだとして データをAに入力したら、ブックBを閉じたいのですが オートフィルタを実行した後だと、「変更を保存しますか?」と 窓が出てくるので、出てこない様にするにはどうしたらいいのでしょうか 長くなって申し訳ないですが、よろしくお願いします
367 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 07:37:15 ] 少しは自分で書く努力しようぜ
368 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 08:39:56 ] year関数、month関数、day関数 オートフィルタは2種類 アプリケーションアラートの停止
369 名前:365 mailto:sage [2010/02/22(月) 10:08:10 ] >>368 その辺りを、調べてみますありがとうございました。
370 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:09:25 ] テキストボックスにInteger型のデータと文字列を結合して表示させたいのですがどう打ち込めばいいでしょうか? イメージ的には textbox1.text = integer型のデータ + "文字列" としたいのですが
371 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:14:05 ] >>370 integer型のデータ & "文字列" じゃ駄目か?
372 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 11:02:40 ] >>371 出来ました ありがとう
373 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 12:56:33 ] ソートの話の続きなんだけど、 一次配列100個の右4文字を昇順でソートするっていう場合は記述するしかないんじゃない?
374 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 14:36:56 ] >>373 セルに入れたくないならそうだろうね でもエクセルを使ってるからには どのみちセルにぶち込むデーターなんだろうし 右4文字を取り出した列を作ってやればいいんでない?
375 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 18:47:48 ] なぁ、EXCEL2000から2007に最近環境を変えなきゃならんオレに 表示とか環境設定みたいなのどうしてるか教えろ。 取り敢えず立ち上がったところから気に喰わないし自作DLLは変な文字吐くし泣けるんだわ。 他のスレで聞いてもいいんだけどVBA使ってる人に聞いてみたいんだ。 デフォルトのに慣れろってんならそうする。
376 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:49:33 ] >>375 2003と同じツールバーを出すサードパーティーのアドインがあったよ 即効で使わないといけないならとりあえずこれ 最近チェックしてないのでなくなってたらゴメン 2007に移行した人に聞いてみたら慣れたら2007のほうが使いやすいって言ってたので 時間的余裕があるなら耐えて使うかなw うちもまだ2003でふんばってまふ
377 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:54:38 ] Office 2007にOffice 2003互換メニューを追加する ttp://www.atmarkit.co.jp/fwin2k/win2ktips/1173oldmenu/oldmenu.html ↑を入れてるw
378 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:40:31 ] まあ、2010も同じ形式なので、諦めて慣れた方がいいような気もするけどね
379 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:05:50 ] とっくの昔に2007になれた。 2007のほうが使いやすいんだが、周りの全員がオレに聞いてくるのでうっとうしい。
380 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:06:21 ] >>376-378 サンクス フリーのアドイン見てみたけど、MSは基本このまま使えって言ってるって事みたいだね。 最初見たときマジでOOoに乗り換えようかと思ったわ。 XPの頃のPCがそろそろ更新のサイクルに来てると思うんだけど乗り換える人もある程度出てくるんじゃね? まああ、VBA関連のコードも書き換え(1から作り直し?)無きゃならんしオレがUIに慣れる方向でやってみて、 同僚の反応とか聞きながらこの先の事は考えてみるわ。
381 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:23:19 ] >>379 そらそうだろ。知ってるやつ居るならオレも聞きたいわwww てか、どのくらいで慣れるのか聞きたいわ。 あと、DLLのインタフェースにXML使うの実装しといたの思い出したらなんとかなった。 とにかくサンクス。
382 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:43:46 ] 2003と2007の両方入れてる 常用は2007なんだけどマクロの記録がタコなんでどうしても2003は消せない UIは慣れるしかない
383 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 23:04:21 ] >>364 アクティブでないアプリケーションの処理が遅くなるのはWindowsが そういう風にCPU処理を配分してるからでしょ。システムのプロパティで 裏のプログラムも同等に処理するように設定したら? その代わりアプリが表側に来てるときの処理速度は落ちるけど PCの性能が無限でない以上仕方ない。
384 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 00:30:51 ] >>383 デュアルコアだと快適になるかな?
385 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 05:51:45 ] ダブルクリックで複数立ち上げるとエクセル本体は一つしか立ち上がらないので マルチCPUでも一つのコアしか使ってくんない スタートメニューからエクセルを必要数起動しエクセルからシートを読み込んでやると 別プロセスで動くので各コアに分担させることが可能 割り振りはたすくマネージャから手動で変更可 これでどれだけ快適になるかはやってみなきゃわかんない よほど処理時間長いものじゃなきゃごちゃごちゃやってる間に終わっちまうしな
386 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 12:32:43 ] 指定のzipファイル内にあるcsvファイルを配列に落とすにはどうしたらよいでしょうか 配布の都合上外部DLLは使用出来ません
387 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 18:06:44 ] 自己解凍ファイルにするとか
388 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 18:54:41 ] >>386 きっとそのzipファイルは変えられないんでしょ。 XPならzipって標準でライブラリなかったっけ? 外部dllには違いないけど、それ読み込んで解凍させるとか。
389 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 19:15:51 ] ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
390 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 21:26:22 ] OS:windows Excelバージョン:2003 条件付き書式を設定していくマクロについて質問です. [問題] C1:E3の各セルに文字 aもしくはbもしくはcが入力されているとします. このときA1のセルにa,A2のセルにbが入力されたとき C1:E3の各セルでaもしくはbが入力されているセルのみ背景を赤にしたいのですが どうすればよいでしょうか? [自分なりの解答] 以下のような条件付き書式を各列で設定していくマクロを作ってみたのですが、 $C$1のところが$C$1〜$E$1とすることができず詰まっています... Do Until ActiveCell.Value = "" Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF($A$1:$A$2,$C$1)>=1" Selection.FormatConditions(1).Font.ColorIndex = 2 Selection.FormatConditions(1).Interior.ColorIndex = 3 ActiveCell.Offset(1).Select Loop End Sub
391 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 21:58:13 ] こういうことか? Sub test() Dim i As Integer, j As Integer For i = 1 To 3 For j = 3 To 5 If Cells(i, j) = Cells(1, 1) Or Cells(i, j) = Cells(2, 1) Then With Cells(i, j) .Font.ColorIndex = 2 .Interior.ColorIndex = 3 End With End If Next j Next i End Sub
392 名前:デフォルトの名無しさん [2010/02/23(火) 22:27:24 ] >>390 よくわかんないけど Sub testestes() Dim myRange As Range, r As Range Set myRange = Range("c1:e1") myRange.FormatConditions.Delete For Each r In myRange r.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF($A$1:$A$2," & r.Address & ")>=1" r.FormatConditions(1).Font.ColorIndex = 2 r.FormatConditions(1).Interior.ColorIndex = 3 Next r End Sub
393 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 22:43:53 ] >>390 条件付き書式を間違ってないか C1は=COUNTIF(A1:A2,C1)>=1で E1は=COUNTIF(A1:A2,E1)>=1といれるべきだと思う
394 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 22:52:26 ] >>391-392 レスありがとうございます. お二人のおかげで作りたいものができました. 勉強になりました.本当にありがとうございます. >>393 レスありがとうございます. ご指摘のとおりです. >>392 さんのレスに有る > & r.Address & のような方法を探してました.
395 名前:345,358,364 mailto:sage [2010/02/24(水) 00:55:58 ] レスくれた方ありがとうございます。 上手く伝わりませんが、>>345 で書いた通り、 PCはデュアル又はクアッドコアで、システムのパフォーマンスオプションはバックグラウンドサービスに設定。 エクセルを複数起動して並列処理しており、ウィンドウが表でも裏でも全て高速動作してる。 画面更新や再計算停止等の高速化は実施済み。 ただし、VBAコードの中にSortメソッドが含まれており、かつ非アクティブウィンドウである場合に限り、Sortメソッドの処理が極端に遅くなる。・・・という事です。 >>385 の方法をスクリプトで自動化してるので、Core i7でExcel2000を8つ起動して同じコードを走らせると8コア100%までぶん回して高速に演算できてるけど、 Sortメソッドを使うとそこが激しくボトルネックになる。 ちなみに普通にエクセルを1つだけ開いてSortを何万回も繰り返すコードを実行中に、デスクトップをクリックしてエクセルを非アクティブにするだけでも途端に劇遅になる。 これ多分Excel2000の仕様というかバグなんだけど、同じ現象についてはググっても見つからなかったので、これが問題になるほど何時間もぶん廻す使い方がよほど特殊なんだろう。 Sortメソッドを使わない方向で解決する事にします。
396 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 19:57:09 ] すみません教えて欲しいんですが SET A = Range("B1:E10") SET X = Range("C5") のような時に 単一セル X はセル範囲 A の 範囲内にあるかどうかの 判定方法はどうやったらよいのでしょうか?
397 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 20:01:38 ] intersect
398 名前:396 mailto:sage [2010/02/24(水) 20:05:39 ] >>397 あ!なるほど ありがとうございました
399 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 20:53:23 ] >>395 何がやりたいのか判らないけどアクセス使ったほうがいいんじゃないか? それはさておき、こことか。 chotosplus.sakura.ne.jp/wordpress/2009/07/16/excel-vba%E3%81%8B%E3%82%89%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B%E5%90%84%E7%A8%AE%E3%82%BD%E3%83%BC%E3%83%88%E6%96%B9%E6%B3%95%E3%81%AE%E9%80%9F%E5%BA%A6%E6%AF%94%E8%BC%83/
400 名前:デフォルトの名無しさん [2010/02/25(木) 04:03:34 ] すみません、教えていただけないでしょうか OS:windows Excelバージョン:2003 反復型の成績判定で10人分の得点を一人ずつ成績判定を行うプログラムを作りたいのですが、 Sub 反復型の成績判定() Dim X As Variant X = Array(60, 82, 87, 50, 56, 86, 89, 76, 58, 68) Dim hantei As Variant hantei = Array("不可です", "可です", "良です", "優です", "対象外です") Dim h As Integer Const n As Integer = 10 Dim i As Integer Dim tokuten As Integer For i = 1 To n tokuten = X(i - 1) Next Select Case tokuten Case Is < 60 Debug.Print Format(tokuten, "#点は ") & Format(hantei(0), "不可です") Case Is < 70 Debug.Print Format(tokuten, "#点は ") & Format(hantei(1), "可です") Case Is < 80 Debug.Print Format(tokuten, "#点は ") & Format(hantei(2), "良です") Case 80 To 100 Debug.Print Format(tokuten, "#点は ") & Format(hantei(3), "優です") Case Else Debug.Print Format(tokuten, "#点は ") & Format(hantei(4), "対象外") End Select End Sub これだと68点の成績判定しかされないのですが、どこを直せば良いのでしょうか?
401 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 06:16:13 ] >>400 nextを end select の後に移動
402 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 06:21:10 ] >>400 Sub 反復型の成績判定() Dim X As Variant Dim element As Variant Dim hantei1 As Variant Dim hantei2 As Variant Dim h As String X = Array(60, 82, 87, 50, 56, 86, 89, 76, 58, 68) hantei1 = Array(0, 60, 70, 80, 101) hantei2 = Array("不可です", "可です", "良です", "優です", "対象外です") For Each element In X h = WorksheetFunction.Lookup(element, hantei1, hantei2) Debug.Print Format(element, "#点は ") & h Next End Sub
403 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 07:27:05 ] え!?hentai???と思ってしまった・・・orz
404 名前:デフォルトの名無しさん [2010/02/25(木) 12:04:56 ] できました! 助かりました。ありがとうございます。
405 名前:デフォルトの名無しさん [2010/02/25(木) 12:14:46 ] すみません、もうひとつ聞きたいことがあるんですが、 星の表示で1〜n個の*を順番に表示させるプログラムをつくったんですが、 Sub 星の昇順表示() '1 〜 n個の”* ”を順番に表示 Dim i As Integer, n As Integer n = 10 Do Debug.Print Format(i, "00") & String(i, "*") i = i + 1 Loop While i < 11 End Sub これをn〜1個の*を順番に表示させるためにはDo〜Loopを使ってどのように変えればいいのでしょうか? 教えていただけないでしょうか。
406 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 12:45:59 ] >>405 初期値 加算値 終了条件 宿題け?
407 名前:デフォルトの名無しさん [2010/02/25(木) 17:48:25 ] Dim y As Integer Dim x As Integer Dim objTableItem As Object '.body ‚loop body data For Each objTAG In objIE.document.body.all 'search for table tag If objTAG.tagName = "TABLE" Then 'add new sheet Sheets.Add y = 0 'row 'loop item in table For Each objTableItem In objTAG.all If objTableItem.tagName = "TR" Then y = y + 1 'row +1 x = 1 'columm=1 End If If objTableItem.tagName = "TD" Then 'set text data Cells(y, x) = objTableItem.innerText x = x + 1 'next columm End If Next End If Next このままだと、Excelを使ったIE操作に関する質問です。 website上のテーブルをコピーして、エクセルにペーストしたいのですが、このままではテキストにリンクが貼られていても、 テキストしかコピーできません。 例えば、<a href ="http.....">VBA</a>の場合、テキストのみがペーストされますが、エクセル上でVBAをクリックすると、URLにジャンプできるようにしたいのですが、何かいいアイディアはございますか?
408 名前:デフォルトの名無しさん [2010/02/25(木) 18:58:19 ] >>406 回答ありがとうございます。 すみません、具体的にはどこをどう変えればいいのでしょうか。 本当に初心者なので、どこをどういうふうに変えたら*の数が下がるようになるのかわからないんです。
409 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 22:22:30 ] >>407 If objTableItem.All.tags("A").Length > 0 Then Debug.Print objTableItem.All.tags("A")(0).href End If で http..... が取得できると思うけど
410 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 23:46:43 ] >405 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
411 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 00:30:18 ] ユーザーフォーム上のテキストボックスに前のデータを表示させたまま下に出力し続けることは可能でしょうか?
412 名前:デフォルトの名無しさん [2010/02/26(金) 00:58:33 ] >410 仰るとおりです。本当に申し訳ありません。 ただ、時間がなくプログラムもどう変えればいいか全然わからず、丸投げしてしまいました。 厚かましいお願いではありますが、初心者でもわかる範囲でヒントをもらえないでしょうか。 見よう見まねで上のプログラムは組めたんですが、反対に星の数を少なくしていくやり方がどうしてもわかりません。 どうかよろしくお願いします。
413 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 01:52:16 ] >>408 なんかの宿題だろうけど 見よう見まねだとしても >>405 の コードでなぜ星の数が多くなっていくのか それを理解するのが先だと思う じゃあ逆に質問 1〜5個の"*"を順番に表示にするには?どう修正する? 実行結果は下ね 01* 02** 03*** 04**** 05***** ちなみに下だと失格だよ 00 01* 02** 03*** 04**** 05*****
414 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:06:08 ] >>412 i = 10 i = i - 1 i > 0
415 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:41:02 ] Dim i As Integer, j As Integer, n As Integer, s As String n = 10 For i = 1 To n Step 1 s = Format(i, "00") For j = 1 To i Step 1 s = s & "*" Next j Debug.Print s Next i End Sub そういえば、iとかjとか一文字の変数名はよくないって話はどうなってんの
416 名前:デフォルトの名無しさん [2010/02/26(金) 03:02:49 ] >414 できました!助かりました!本当にありがとうございます。 >413 i = 1 という条件を付け加えればよかったんですね! 一人じゃ何もわからず、途方にくれていました。本当に助かりました。 ありがとうございました。
417 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 08:18:56 ] >>415 変数名1文字なんてどうでもいい それよりループ回してs=s&"*"なんて恥ずかしいからやめろ >>405 さえString関数使ってるだろ?
418 名前:415 mailto:sage [2010/02/26(金) 09:54:18 ] なんで? 01* 02*+ 03*+* 04*+*+ 05*+*+* こういうのやる時必要でしょ?
419 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 11:01:47 ] >418 ヲイヲイ・・・
420 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 11:23:13 ] For文で変数にiとjを使うのは昔からの慣習なので問題ない
421 名前:デフォルトの名無しさん [2010/02/26(金) 15:39:29 ] 時間がないと言ってるのに>>413 はちょっとかわいそうだとオモタ
422 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 19:40:12 ] 名簿から名前(アルファベット)を拾って 頭文字別の一覧表シートを作成しようとしています。 ソート後に頭文字を if str[i] == str[i+1] hoge列に代入 elseif str[i] != str[i+1] hoge = hoge+1 hoge列に代入 という方法でやろうと思ってるんですが (if a 〜 if z では長くて面倒ですし・・) 他に方法というかVBA側で用意されてるものってあったりしますか? リスト構造体的なものがあってそこに文字列ぶちこんで 検索文字抽出→GetNextで抽出文字列を順々に引っ張り出せたりとか・・ そういったものがあったりしないかなぁと思い質問させていただきました。
423 名前:422 mailto:sage [2010/02/26(金) 19:43:33 ] == → = != → <> に訂正します。 比較演算子がC++になってしまいました・・
424 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 21:19:44 ] >>422 (if a 〜 if z では長くて面倒ですし・・) の部分が何が言いたいのかよくわからん。 例示されたプログラムのどこにも出てきてないのに、いったい何がやりたいんだ。
425 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 21:36:06 ] >>422 1Byte文字かつアルファベットのばあい。 文字列の先頭1文字の文字コード(アスキーコード)取得して適当に計算して Cell位置に変換してそこにぶち込む。をLoopすれば? カラム方向のカウンタも配列にして。
426 名前:422 mailto:sage [2010/02/26(金) 22:06:04 ] >>424 if str[i] like "Aa" 〜 if str[i] like "Zz" ということでした。わかりづらくて申し訳ありませんでした >>425 やはりLoopで回すのが手っ取り早そうですね。 ありがとうございます。
427 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 22:22:51 ] >>417 別にええやんと思う人間が実はここにもいる。 性能的な違いはある?
428 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:57:22 ] >417 >それよりループ回してs=s&"*"なんて恥ずかしいからやめろ 途中の結果も必要なんだから別に恥ずかしいとは思わんが・・・
429 名前:427 mailto:sage [2010/02/27(土) 01:21:43 ] あ、文字列を作るためだけにループ使うなと言いたいのか。 でもString関数なんて今まで知らなかったよ。 ところで文字を連続させる関数て何に使うんだろうか。
430 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 08:35:11 ] >>429 文字を連続させるために使う。
431 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 08:55:01 ] 使いたい人が使いたいときに使う。 例えば*を100個書きたい場合(101個だとダメ99個でもアウト〜)に String()を使えば間違わないで書けるとかじゃろ?
432 名前:デフォルトの名無しさん [2010/02/27(土) 09:38:38 ] worksheetfunction に rept ってなかったっけ?
433 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 13:13:17 ] だめだ、同じ文字を10個ならべる目的が思いつかない。 固定だったら"**********"とか書くし需要少なそうだ。 まあ、あるものは使った方がいいのは確かだと思う。 String関数の中でループ処理が組んであるんだろう。
434 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 13:42:12 ] バリアント型 (内部処理形式 String の Variant) の値を返します。 指定した文字コード (ASCII またはシフト JIS コード) の示す文字、または文字列の先頭文字を、 指定した文字数だけ並べた文字列を返す文字列処理関数です。 Dim MyString MyString = String(5, "*") ' "*****" を返します。 MyString = String(5, 42) ' "*****" を返します。 MyString = String(10, "ABC") ' "AAAAAAAAAA" を返します。
435 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 13:49:08 ] ForとString()じゃパフォーマンスが段違いに違う。 String(999999999,"*")は一瞬で処理されるのに対し、ForはExcel自体がフリーズする。
436 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 13:49:20 ] >>433 目的ですか、うちでよく使うのは その1、ダミーデーター作成(スペースでいい場合はspace()を使うけど) 1.1、固定でも200個とか数えるのやだし 1.2、固定長データを扱うときにあまった領域の埋め草を作るのに使う その2、CUIで棒グラフ あとは、なんだろうね、なにかあったような気がするが思い出せない
437 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 13:50:37 ] たとえば あるLoop処理でc言語のTableを作るとかの場合に、 タブを何個挿入するのかをブレイスの深さで変えたい場合、 ブレイスの深さをカウンタにしておけば少し便利かも。 タブじゃなくてスペース4個とかでも同じ。 String(i, Chr(9)) & StringBuff & vbLf
438 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 13:50:43 ] ごめん9が1個多かった
439 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:44:21 ] なるほど、固定長データを埋めるときという例はすごくよく判ったし パフォーマンスが全然違うんだね。ありがとう。 生の固定長データを自分で作ったことが多分ないから気づかなかったよ。
440 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:02:28 ] だんだん文字列を大きくしていくのはメモリ確保に時間がかかるからやらないのが常識。 サイズが小さいうちは平気だけどね。
441 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 17:45:33 ] それは何nsの話なのか
442 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 18:39:18 ] 小さいうちは数ナノ秒でも大きくなると幾何級数的に時間がかかるよな。
443 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:11:25 ] excel2003を使用しています。 ファイルを外部から取り込む際に、ダイアログを使用していますが、 この取り込むときのフィルターのかけ方で、特定の文字列を含むファイルのみ表示することは可能でしょうか? Filter = "エクセルファイル(*.xls)" & Chr(0) & "*.xls" & Chr(0) 現状はこの様になっており、拡張性がエクセルファイルのものだけを表示するようになっています。 これに特定の文字列を持ったファイル名を表示するという条件を追加できませんか?エクセルファイルで、名前が091201を含むなど
444 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:13:24 ] >>441 性能問題起こしそう
445 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:16:35 ] "09*.xls"
446 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:53:18 ] まぁ、スピードが要求されるならC++でDLL書いてVBAから呼べって話になるんですがね
447 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:02:08 ] そういう問題じゃねーのまだ分ってねーの 計算量のオーダが2乗ってことだよ
448 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:04:49 ] ほら 1+2+3+...+n=n(n+1)/2=n**2+1/2*n
449 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:28:51 ] 流れを無視してすみません VBA初心者ですが質問させてください Userformでの話なのですが ボタンが押された際に TextBoxにセルの値を代入し表示 2秒間隔をあけ、その後フォームを閉じる という処理を行いたいのですがTextBoxに表示される前にフォームが閉じられてしまいます。 フォームが閉じられる前にTextBoxにテキストを表示させるにはどのような方法をとればいいのでしょうか? サンプルコードは以下のとおりです。 Private sub CommandButton1_Click() TextBox1.text = sheets("sheet1").range("A1").value call delay(2) '2秒ディレイするという命令 Unload Me endsub 分かりづらいコードで申し訳ないですがご指導のほどお願いいたします。
450 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:40:23 ] >>445 ありがとうございます!!
451 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 22:43:48 ] どうしてもその自作関数つかうなら delayのほうに 閉じる動作書けばいんじゃね
452 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 23:09:19 ] >>447 .NET Framework使えよって話だ
453 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 00:17:06 ] >>449 ontime
454 名前:デフォルトの名無しさん [2010/02/28(日) 00:40:48 ] VBAで指定されたURLに日本語をくっつけてWebを開く事は出来ますが そうではなくて 開いたWebページのあるテキストボックスに選択されたセルにある文字列を入力して ボタンを押下する方法とかはあるのでしょうか? もしあればご教授お願いします
455 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 01:10:19 ] >>454 Sendkeys
456 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 11:21:20 ] >>449 DoEvents を使ってみるといいかも TextBox1.text = sheets("sheet1").range("A1").value DoEvents call delay(2) Unload Me
457 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 01:46:21 ] テキストファイルA.txtの内容をstrAとし、 テキストファイルB.txtの内容をstrBとし、2つを合体させて クリップボードにコピーしようとしています。 strA も strB も、それぞれ読み取れてはいるのですが、 strA & strB とすると前者の方しかコピーされません。 逆にしても同じです。 &でつなぐことはできないのでしょうか?
458 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 02:42:09 ] >>457 よくわかりませんが、先に strAB = strA & strB したり、そこで文字列結合関数を使ってみては?
459 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 19:14:57 ] nul文字混入
460 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:00:35 ] Worksheets("225構成銘柄(業種別分類)").Range(Cells(2, 1), Cells(2, 2)) = Worksheets("水産").Cells(3, 3) これでアプリケーション定義またはオブジェクト定義のエラーです。が出るのは何でだ? もしかしてシートまたいでのコピーっていちいちactiveにせないかんの? 簡略表記できないの?
461 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:50:10 ] >>460 1. Worksheets("225構成銘柄(業種別分類)").Activate Range(Cells(2, 1), Cells(2, 2)).value = Worksheets("水産").Cells(3, 3).value 2. With Worksheets("225構成銘柄(業種別分類)") .Range(.Cells(2, 1), .Cells(2, 2)).value = Worksheets("水産").Cells(3, 3).value End With 3. Worksheets("225構成銘柄(業種別分類)").Cells(2, 1).Resize(1, 2).value = Worksheets("水産").Cells(3, 3).value お好きなのをどうぞ
462 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:22:41 ] なんか納得いかないけどありがとう御座います。 とくに2なんかwithで囲っただけでなんで上手く行くんだ?
463 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:52:33 ] >>462 RangeやCellsはシートを指定しないとアクティブシートを対象とする。 そのため460の書き方では、CellsのシートとRangeのシートが一致していない。 461の.Cellsはドッドが付いているため.Rangeと同シートを対象としているので動く。 と正しくないかもしれないけど勝手解釈な説明をしてみた。
464 名前:デフォルトの名無しさん [2010/03/03(水) 08:47:09 ] >>457 (strA & strB) としてはどうか
465 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 16:46:26 ] >>463 ふんわりと勉強になった。 知らん事だらけで困惑する。
466 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 20:11:36 ] 簡単に言うと、 Cells(2, 1), Cells(2, 2) ってのが、どこのシートのセルか指定されてないってことね。
467 名前:デフォルトの名無しさん [2010/03/03(水) 21:25:06 ] 現在VBAでエラーが出た場合 On Error GoTo ErrorHandler ErrorHandler: MsgBox "エラーが発生しましたので終了します" のように強制的に終了させていますが これだとどこでエラーが起こったのかわかりません。 しかしこれをはずすとVBAの画面が出てきてしまうのでそれは何としても避けたいのですが いわゆる実際の開発現場での作業などで作成される場合、 一般的にデバッグってどうやってされているのでしょうか? たとえば通過ログを各地にはりつけてこのログが通って、このログが通っていないので その間で落ちたと言うやり方が思いつくのですが、 あるいはこの部分で落ちたとかがわかるコードなどあるのでしょうか?
468 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 21:32:39 ] >>467 Debug.Assert(条件文)
469 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 21:40:30 ] Err.Description じゃなかったっけ? それみてエラー箇所が特定出来ないなら関数が大きすぎるんじゃないか?
470 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:22:40 ] >>467 とりあえずErrオブジェクトでぐぐれ エラーの発生した場所を正確に知るにはErl関数を使うという手もあるが 使い方がかなり面倒なのでおすすめはしない
471 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:28:40 ] ちがう Err.LineNumber
472 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:06:17 ] >>467 VBEのメニューバーにそのものずばり「デバッグ」てのがあるでしょ いちいちソースを書き換えなくても、どこまで実行したら一時停止とかできるんだよ
473 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:44:12 ] >>471 ErrオブジェクトにLineNumberなんてプロパティある?
474 名前:デフォルトの名無しさん [2010/03/04(木) 20:12:54 ] Excelにプルダウンを入れていて、いくつか選択肢を入れているのですが Excelを最初開いた時には空白で 別のシートを選択して、またこのシートに戻ってきた時に表示されます これの原因ってわかりますでしょうか? 初期化がうまくいっていない気がしますが どうしても理由が分かりません ちなみにコードとしては VBAプロジェクトの同じシートの中に下記の記述を入れています Private Sub Worksheet_Activate() With Me.Director_Combo .Clear .AddItem "" .AddItem "あああ" .AddItem "いいい" .AddItem "ううう" .ListIndex = 0 End With End Sub
475 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:22:51 ] >>474 ThisWorkbookのWorkbook_Openイベントに記述する シートの指定を忘れずに
476 名前:デフォルトの名無しさん [2010/03/04(木) 21:48:31 ] ある文字列中に.が何個あるか出力したいんですけど、どうすればいいですか? 例えば"1.25.30.2"ならば3を出力したいです。
477 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 21:59:28 ] >>476 単純に思いついたコードなんで間違ってたらすまん Dim wkArr() As String wkArr = Split("1.25.30..", ".") MsgBox UBound(wkArr)
478 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 22:11:36 ] あんまりスマートじゃないな s = "12.34.56.." Debug.Print Len(s) - Len(Replace(s, ".", ""))
479 名前:デフォルトの名無しさん [2010/03/04(木) 22:30:41 ] >>478 なるほど。LenとReplaceを組み合わせるんですね。 どうもありがとうございます。
480 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:01:38 ] Sheets(intS).Activate ActiveSheet.Range("C3:C100").AutoFilter Field:=1, Criteria1:=ANAME Range("C100").Select Selection.End(xlUp).Select If Selection.Value <> "あああ" Then Range(Selection.Offset(0, -2), "E4").Copy Sheets(intB).Activate Range("C100").Select Selection.End(xlUp).Select If Selection.Value <> "" Then ActiveCell.Offset(1, 0).Range("A1").Select End If ActiveSheet.Paste ← End If Selection.AutoFilter 矢印の部分でWorkSheet クラスの Paste メソッドが失敗しましたのエラーになってしまいます。 * Microsoft Visual Basic for Applications (VBA) マクロで、Excel 2003 ブックの 1 行全体のコピーと貼り付けを実行している。 * Microsoft VBA マクロで、Excel 2003 ブックの 2,516 以上の行の範囲のコピーと貼り付けを実行している。 のどちらにも当てはまっていないと思うのですが、なぜでしょう。
481 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:03:56 ] ごめんなさい書き忘れました。 Windows7 Office2007 です
482 名前:デフォルトの名無しさん [2010/03/07(日) 08:20:54 ] やってはいけないの見本
483 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 09:46:48 ] >>480 コピー元かコピー先のどちらかでセルが結合されてない?
484 名前:480 mailto:sage [2010/03/07(日) 17:31:48 ] セルの結合はないです。 PasteSpecialでも同様のエラーが出ます
485 名前:デフォルトの名無しさん [2010/03/07(日) 19:38:09 ] VBAを利用して Webページにある複数のテキストボックスに A1セルに書かれている内容をWeb上のAというテキストボックスに入力 A2セルに書かれている内容をWeb上のBというテキストボックスに入力 するような物を作りたいのですが やり方とかあるのでしょうか? あれば教えてください
486 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 20:22:08 ] >>485 IEオブジェクト.Document.フォーム名.テキストボックス名.value = 設定したい内容 フォーム名やコントロール名が無い場合 DocumentオブジェクトのFormsコレクションやItemコレクションを使う IEオブジェクト.Document.Forms(n).Item(n).Value = 設定したい内容
487 名前:デフォルトの名無しさん [2010/03/07(日) 21:56:28 ] A〜E列を下記。A,Dを検索キーとしてBをEに移します。 test()では1が拾えず10を拾ってしまいます。(XP, Excel2000) どう修正すればよいでしょう。 A B C D E -- -- -- -- -- 1 あ __ 1 2 い __ 2 3 う __ 3 9 け __ 9 10 こ __ 10 11 さ __ 11 14 せ __ 14 15 そ __ 1 Sub test() Set myRngA = Range("A1:A15") Set myRngD = Range("D1").CurrentRegion For i = 1 To myRngD.Rows.Count myKey = myRngD.Cells(i) Set myCel = myRngA.Find(what:=myKey) If Not myCel Is Nothing Then myRngD.Cells(i, 1).Offset(0, 1) = myCel.Offset(0, 1) End If Next i End Sub
488 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:49:54 ] >>487 Set myCel = myRngA.Find(what:=mykey, LookAt:=xlWhole)
489 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:54:31 ] 大量の日付+株価の四本値データ(1まとまりで5列使用)があるのですが、開始日も終了日も全てバラバラ(最長の奴で8192日データ。この8192日の中に全ての期間入ってる) 綺麗に日付の行をそろえて昇順でソートしたいのですが、VBAで上手いことやるアイデアを下さい。
490 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:29:40 ] >>489 ソートするって、四本値データが日付順にならんでないというのが不思議だが 同じ日付を同じ行に持ってきたいということかな? もしそうなら ビンソートでデータをビンに詰め終わったところで 空きビンに対応する日付データーを入れてやればいいんでないかな
491 名前:487 [2010/03/07(日) 23:38:31 ] >488 ありがとう。たすかりました。 LookAt:=xlWholeがないと、一行目が無視されるわけですね?
492 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:24:39 ] >>491 全然違う。 LookAt=xlWholeは完全一致。 これを書かないと初期状態ではLookAt:=xlPartの部分一致になる。 開始セルのAfter:=***を書かないと範囲の先頭の次から検索するので 部分一致で10がヒットすることになる。
493 名前:489 mailto:sage [2010/03/08(月) 01:37:33 ] ビンソートという用語初めて知った。情報有難う。 ソート自体は簡単なんだけど、データのスタート位置設定するの難しいわ。 日付が素直に+1日づつなら多少は簡単なんだけど、休場日とかのせいで日付が飛び飛びなのがうっとうしい・・・ 後学の為にVBAで処理したいけど、もう手作業でやるか?
494 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:57:54 ] SQL使えよ
495 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:36:05 ] SQLもビンソートも不明だったので。 @→一番長い日数入ってる列探して基準にする A→各銘柄からデータ取得開始日とって、基準を参考に貼り付け開始行を取得 B→貼り付け開始行を利用して切り取り貼り付け C→Aから繰り替えす みたいな普通の力技でなんとかしました。アドバイス貰ったのに全く生かせないでごめんなさい。
496 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 13:37:07 ] オートシェイプの検索アドインを業務の補助として作成中です。 一般的な実装はできましたが、よくばって検索値の前回値を使用できるようにしたい。 このような場合、前回値をどこに保存するのが一般的なのでしょうか? excelマクロ・xlaならではの保存方法等ないでしょうか? ないのであれば、別途保存用のシートに保存するか、またテキストファイル等に残します。 (あんまりエレガントじゃないきがして嫌です。) ご存じの方おりましたらご享受ください。
497 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 13:58:58 ] >>495 ビンソートよりもバケット(バケツ)ソートという名前のほうが一般的かもしれない 内容は 日付のラベルが付いたビンに対応するデーターを放り込んで 詰め終わったら、端から順に取り出す 今回はデータがもともと順並びしてるので、 結果的にあなたがエクセル上でやったことと同じ作業ですね
498 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 14:06:04 ] >>496 Excelはシートに保存するのがエレガントだと思います。
499 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 15:39:54 ] なんらかの関数で引数となるシート名が存在するかチェックしてるんだが シート数分Forでまわして同名シート見つけた時点でexitしてるんだけど シート枚数が多くて使用者のPCスペックが低いためか時間が結構かかってきているんだが なんかアドバイスない? さしあたって事前にシート名チェックするのやめて ダメならOn Error GoToで飛ばすようにしといたんだけど もっといい方法あったら教えてください
500 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 15:57:25 ] シート名チェックってそんなに時間かかる処理だっけ? 何枚くらチェックしてるの?
501 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 16:13:38 ] シートの存在チェックは、何かやってみてon error gotoが一番速い
502 名前:499 mailto:sage [2010/03/08(月) 16:22:21 ] >>500 50枚くらいなんだけどモバイル用ノートで CPUがセレロンなんだ・・・ >>501 やはりそうですよね まず実行してみてだめだったらon error gotoで 具体的エラー内容を探すように変えていきます。 ありがとうございました。
503 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:02:04 ] >>502 ん、通じたのかな?例えばIsWorkSheetExist()みたいな関数を作って、その中で on error goto NotExist a = worksheet("Sheet1").range("a1").value // (*) return true NotExist: return false をやれってことで、「何かやって」は(*)の行の内容のこと。 いろんな関数にon error gotoをばらまけってことじゃないよ。
504 名前:デフォルトの名無しさん [2010/03/08(月) 18:36:00 ] ADOつかってSQL使えば? 別にExcelのシートに対してもSQLで読み書きできるよ
505 名前:デフォルトの名無しさん [2010/03/08(月) 20:14:29 ] こんばんは。どなたか詳しい方教えてくださいませんか。 エクセルのマクロでCSVファイルを開く→編集→保存(CSV形式)までを自動化しているのですが、 保存時の文字コードをS-JISではなくEUC-JPにして保存したいのです。 色々調べたんですが使えそうなのがなかったので・・。
506 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:02:08 ] 保存した後で変換ツールに投げるとこまで自動化したらばどうよ
507 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:19:20 ] >>505 nkf.dll
508 名前:デフォルトの名無しさん [2010/03/08(月) 21:48:31 ] ありがとうございます。 nkf.dll を使ってみようと思います。
509 名前:デフォルトの名無しさん [2010/03/08(月) 22:44:29 ] 詳しい方に質問です。 ExcelVBAでシートに保護をかけて、変更して欲しくないセル(項目名など) をロックしています。 ただ、シートに保護をかけてしまうと、テキストボックスや線オブジェクト、 図形オブジェクトがdisable?になってしまって使用できなくなります。 何か解決する方法はありますでしょうか?
510 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:33:02 ] 保護の対象を細かく指定すりゃいいだろ
511 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:03:00 ] DrawingObjects:=False
512 名前:デフォルトの名無しさん [2010/03/09(火) 14:40:04 ] XPで2003を使用しています。 VBA初心者で調べつつ作成しましたが、思った動作になりません。 どうかご教示下さい。 仕入先マスタのシートで仕入先CDを重複しないよう、入力後に チェックをするようにしました。 (コードは次レスに貼ります) 【問題点】 If Not IsNumeric(Target.Value) Then Exit Sub を入れると、ターゲットが複数行の場合は動作してくれません。 上記のコードを削除すると、複数行を挿入したり、連続しない複数行を 削除した時に重複したと認識されてしまいます。 (emptyかNullが重複?) ※つづきます
513 名前:512 [2010/03/09(火) 14:42:31 ] ※つづきです Dim maxRow As Long Private Sub Worksheet_Change(ByVal Target As Range) With Workbooks("仕入管理帳.xls").Worksheets("仕入先マスタ") maxRow = .Cells(Rows.Count, 1).End(xlUp).Row ' If Not IsNumeric(Target.Value) Then Exit Sub If Target.Column <> 1 Then Exit Sub Set rngTarget = .Range("A2:A" & Target.Row - 1) Set rngFind = rngTarget.Find(Target.Value, LookAt:=xlWhole) If Not rngFind Is Nothing Then If Target.Row <> rngFind.Row Then Application.EnableEvents = False MsgBox ("仕入先CDが重複しています"), vbExclamation Target.ClearContents Application.EnableEvents = True End If
514 名前:512 [2010/03/09(火) 14:44:01 ] ※最後です Else Set rngTarget = .Range("A" & Target.Row + 1 & ":A" & maxRow) Set rngFind = rngTarget.Find(Target.Value, LookAt:=xlWhole) If Not rngFind Is Nothing Then If Target.Row <> rngFind.Row Then Application.EnableEvents = False MsgBox ("仕入先CDが重複しています"), vbExclamation Target.ClearContents Application.EnableEvents = True End If End If End If End With End Sub よろしくお願いします。
515 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:20:45 ] ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
516 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:58:01 ] >>512 Targetに複数のセルが含まれるときは、こうすれば一つずつチェックできる もちろんセルが1つでもエラーにはならない。Forの中を1回通るだけ For Each c In Target If Not IsNumeric(c.Value) Then Exit Sub Next c
517 名前:512 [2010/03/09(火) 16:25:12 ] >>516 出来ました!ありがとうございます! 1週間もあれこれ悩んでいたので、とても助かりました!!
518 名前:デフォルトの名無しさん [2010/03/09(火) 20:57:12 ] Excelに Craete AAA_TBL 〜 一行改行されて Craete BBB_TBL 〜 一つのシートにこういうデータがあった場合、 crateAAA_TBL.sqlファイルを作成して その中には Craete AAA_TBL 〜 crateBBB_TBL.sqlファイルを作成して その中には Craete BBB_TBL 〜 と分割したいのですが 分かりますでしょうか?
519 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 21:01:46 ] わけわからん、なにが起きてるんだ r=3 c=10 debug.print r , c if r=3 and c=2 then ........ elseif r=3 and c=4 then ........ elseif r=3 and c=3 then ........ elseif r=3 and c=2 then ....... elseif r=3 and c=10 then debug.print r , c debug.print "ここまで来た" end if 実行結果 3 10
520 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:00:52 ] Sub test() r = 3 c = 10 If r = 3 And c = 10 Then Debug.Print r, c Debug.Print "こないわけないだろ" End If End Sub
521 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:15:58 ] でも来ねえだもん、くまった
522 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:18:37 ] 省略せずに丸ごとソースを貼るかエクスポートしてどこかにアップしろ
523 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:20:24 ] if r=3 and c=2 then まったく同じ条件のIfが2つある。どうせほかにもタイプミスとかしてるに決まってる
524 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:44:29 ] デバッガでブレークポイント仕掛けてステップ実行しろよ
525 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:45:45 ] スマソ、自己解決した 頭のほうの if に不等号が入ってた 思い込みがあると目が見てても脳が見てないようだ
526 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:17:38 ] 無能には良くあること
527 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:37:20 ] 本当に>>523 が正解だったとは
528 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 06:46:48 ] 不等号が入ってたのは正解なので タイプミスではありません 見のがしです すいません、正確に言っておきたいもので(まげられないおんな風)
529 名前:デフォルトの名無しさん [2010/03/10(水) 07:34:21 ] ソフトのこと全く知りません。 そんな僕でもがんばればVBAは習得できるでしょうか?
530 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:13:26 ] はじめから知ってるやつはいねえからそこは心配ない あとはセンスしだい
531 名前:デフォルトの名無しさん [2010/03/10(水) 11:19:08 ] >>530 ありがとうございます。 超入門の本を読んでいるのですが、読み終わったらもう少し専門書を購入し読みながら、 他の人の書いたプログラムを解読しつつ勉強しようと思うのですが、 このやり方でいいのでしょうか?
532 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 11:49:53 ] 人が言葉を覚えるとき最初はオウム返しから始まるでしょ プログラム言語もそれと似たようなもんですよ 書籍のサンプル等をガシガシ打ち込んでけば、身についていきます コピペではあんまり身につきません、コピペが早くなるだけです 手打ちでがんばってください 人の書いたプログラムの解析は自分で作るよりも大変ですから、 そこから入るのは無理があるように思います
533 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:49:45 ] >>531 そういうやり方&他人のコード解読法で一回挫折したので、その後検定取りの為の勉強したな。(VBAエキスパートスタンダード) アレは基本的に誰でも受かるように出来てるし、体系だって勉強出来るシステムになってるので基本は身に付くよ。
534 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 05:27:46 ] Excel VBAで、コピーしたセル範囲をペーストする時に列幅を変えずに貼り付ける事は 可能でしょうか。 コピーする内容にセル結合や罫線が含まれています。 どうかご教授下さい。
535 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 07:59:09 ] 列をコピー&ペースト
536 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 12:00:19 ] >>534 まず普通にコピペしたあと、同じ場所にもう一度形式を選択して貼り付け→列幅
537 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:03:47 ] B3セルに"私は花子ですわ"、B4セルに"私は太郎ですよ" があるとき、C3、C4セルにA列の2つの文字列を比較して違う部分を赤色にしたい。文字列の長さは同じとする。 で、次のように作ったんだけど、最後しか赤くならない。なんで? Sub 文字列比較() ' 文字列比較 Macro ' マクロ記録日 : 2010/3/12 ユーザー名 : xp Dim str1 As String Dim str2 As String Dim buf1 As String Dim buf2 As String str1 = Range("B3") str2 = Range("B4") For i = 1 To Len(str1) buf1 = Mid(str1, i, 1) buf2 = Mid(str2, i, 1) If StrComp(buf1, buf2, vbTextCompare) = 0 Then Range("c3").Value = Range("c3").Value & buf1 Range("c4").Value = Range("c4").Value & buf2 Else Range("c3").Value = Range("c3").Value & buf1 Range("c4").Value = Range("c4").Value & buf2 Range("c3").Characters(i, 1).Font.ColorIndex = 3 Range("c4").Characters(i, 1).Font.ColorIndex = 3 End If Next End Sub
538 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:32:35 ] 初歩的な質問ですがお願いします。 For If xxx then @の処理 Else Aの処理 End If Bの処理 Next xxxの場合、@の処理をした場合には、Bの処理をせずに 次のfor文へ行きたいのですが、elseの中になにを書けばいいでしょうか?
539 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:42:58 ] >>537 マクロの記録でやってそうだからわかりそうなもんだけど、 Range("c3").Characters(3, 1).Font.ColorIndex = 3 '花 Range("c3").Characters(4 1).Font.ColorIndex = 3 '子 Range("c3").Characters(7, 1).Font.ColorIndex = 3 'わ は続けてやらないとダメだと思う。 j = 0 For i = 1 To Len(str1) If StrComp(Mid(str1, i, 1), Mid(str2, i, 1)) <> 0 Then j = j + 1 ReDim Preserve s(1 To j) s(j) = i End If Next こんな感じで位置を先に取得してみては?
540 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:46:19 ] 連レスすまん。 >>538 Aの処理の次にBを書いちゃダメなの? For If xxx then @の処理 Else Aの処理 Bの処理 End If Next それか、エスパーぎみに答えるとSelect caseを使うとか??
541 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:54:58 ] >>537 これの意味を勘違いしているような Range("c3").Value = Range("c3").Value & buf1 セルc3の文字列を取出してbuf1の内容と文字列結合 → セルc3に上書き この処理をすると これ以前にあった色指定が無効となる つー事で >>537 を修正すると Sub 文字列比較() Dim str1 As String Dim str2 As String Dim buf1 As String Dim buf2 As String str1 = Range("B3") str2 = Range("B4") Range("c3").Value = str1 Range("c4").Value = str2 For i = 1 To Len(str1) buf1 = Mid(str1, i, 1) buf2 = Mid(str2, i, 1) If StrComp(buf1, buf2, vbTextCompare) <> 0 Then Range("c3").Characters(i, 1).Font.ColorIndex = 3 Range("c4").Characters(i, 1).Font.ColorIndex = 3 End If Next End Sub
542 名前:538 mailto:sage [2010/03/12(金) 21:03:38 ] >>540 ありがとうございます。 顔洗って出直してきます。
543 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:25:28 ] For If xxx then @の処理 Else Aの処理 Bの処理 End If Next
544 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 05:44:13 ] >>538 for x=1 to 100 if xxx _ then @の処理 else Aの処理 end if Bの処理 Next 次のfor分の処理 こう書くと Bの処理をコメントアウトすればいいんじゃねということがわかるけど Aの処理のあと”だけ”にBの処理をしたい、と言うこと?それとも 真ならば他の人のいうとおりだけど Bの処理はAの処理の前にしたいのか、後にしたいのかが不明確ですよ Bの処理がAの処理と独立ならば順不同だけど
545 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 06:06:19 ] VBAと関係ないね
546 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 11:50:59 ] Webクエリでデータを読み込んで加工するVBAを作成しています データの込みこみを待ってから次の工程へ行くようにするにはどうすればよいですか?
547 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 15:10:25 ] >>546 Do While IEobject.Busy = True And IEobject.ReadyState <> 4
548 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:47:47 ] こみこみ ← なんかカワイイ
549 名前:546 mailto:sage [2010/03/13(土) 18:59:55 ] ありがとうございます WebクエリとIEObjectの関係が分からないので、 もう少し調べます
550 名前:デフォルトの名無しさん [2010/03/13(土) 20:40:49 ] Cells.Replace What:="1", Replacement:="1", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 0から9までの全角数字を半角数字に変換したいのですが 上記を10回書くよりも これをfor文で回したいのですが 全角でというのか実現できません 教えてください
551 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:28:58 ] >>550 StrConv
552 名前:デフォルトの名無しさん [2010/03/13(土) 22:07:45 ] すみません質問です 以下のような数字の置き換えをしたいのですがどのようにすればいいでしょうか? <a name="1"> → <a href="hoge"> <a name="2"> → <a href="hoge"> <a name="3"> → <a href="hoge"> 〜 <a name="9999"> → <a href="hoge">
553 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:21:59 ] >>550 全角文字をループで扱うのはけっこう難しい。 文字コードを数値として扱う手もあるが、可読性が悪くなる。 プログラムの見栄えをすっきりさせたいなら、 配列に入れるか、置換のための関数を作るという手がある。 aryWhat = Array("0", "1", "2", ……
554 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:30:04 ] >>552 そういう場合は正規表現を使います。桁数の決まっていない数字は[0-9]+と書きます。 <a name=""[0-9]+""> とすれば、これ1行で1から9999までのすべてが検索の対象になるので、これをhogeに置換します。
555 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:33:35 ] >>550 ヒント Sub d() For i = 0 To 9 Debug.Print i, StrConv(i, vbWide) Next End Sub
556 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:34:43 ] >>554 ありがとうございます すごく助かりました
557 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 11:41:57 ] 別のエクセルファイルの標準モジュールに書いてある定数を読み込むには、 どうしたらいいでしょうか?
558 名前:557 mailto:sage [2010/03/14(日) 12:23:52 ] 自己解決しました
559 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 16:11:54 ] NO 品名 価格 数量 金額 1 りんご 100 3 300 ・・・ という連続したデータを NO 1 ・・・ 品名 りんご 産地 数量 3 ・・・・ というふうに転記させる方法を教えてください。 転記先のフィールドは、元のフィールド名のものがない場合もあり、 逆に元のフィールドに無いものが転記先にあったりします。 また、転記元や転記先のフィールドの順番は、入れ替わる場合があります。 うまいやり方がありましたら教えてください。
560 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 17:34:39 ] >>559 どうかな。 1行目に作業用の空白行を追加する。 転記元の左端から1セルずつ値を読み、右に移動するループ(セルが空白になるまで) 転記先の上端から1セルずつ値を読み、下に移動するループ if転記元の値と転記先の値が同じならば 作業用の行に転記先のセル位置を記入 (ここまでで転記先のセル位置を取得) A1 A2 A4 NO 品名 価格 数量 金額 1 りんご 100 3 300 あとは転記元のデータを1行ずつ処理。
561 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 17:39:05 ] >>559 新しいほうのデータの1レコード分の配列を用意する 古いほうのデーターから該当する配列の位置に読み込む 新しいデータへ配列から書き出す 以後レコード分繰り返し
562 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:22:14 ] 別のシートにセルを一個ずつコピーしていけばいいのでは
563 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:48:01 ] おれだったらVLOOKUPでぱぱっと片付ける
564 名前:480 mailto:sage [2010/03/14(日) 22:45:10 ] Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
565 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:15:40 ] Excel2007 Workbooks.Add で新規にワークブックを作成する際に オプション→数式で自動になるように作成することってできませんか? 今の状態は手動になっています。
566 名前:565 mailto:sage [2010/03/15(月) 18:09:02 ] 自己解決? 元のプログラムが入っているブックのオプションが手動になっていたので自動に変えたら 新しくできたブックも自動になってました。 なんか、自分自身をコピーして作ってるみたいな?(よく判りませんが w
567 名前:デフォルトの名無しさん [2010/03/16(火) 11:39:35 ] WinXP Excel2003 Sub Input_Date(ByVal iDay As String) ActiveCell.Value = CStr(iYear) _ & "/" & CStr(SpinButton1.Value) & "/" + iDay ActiveCell.NumberFormatLocal = ComboBox1.Value End Sub いまのままだと何処のセルにも入力するようになっています。 指定したセルにのみ入力するよう変更したいのですが、どこを直せば良いでしょうか?
568 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 12:59:16 ] >>567 ActiveCell
569 名前:デフォルトの名無しさん [2010/03/16(火) 16:40:50 ] VBAで、「どこぞのプロシージャ内で」、「別のプロシージャやイベントを設定・修正」するって出来る? 例えばBook/Formのロード時のイベントプロシージャで、 btn_test_1 btn_test_2 … btn_test_10 …って感じのボタン10個について、forで回してそれぞれのClickイベントに同一の処理を上書きさせる、とか。 それともクラスモジュール作って〜な やり方しか無いのだろうか? わかり辛い書き方でごめん。
570 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 17:54:28 ] 2003、XPです。 株のシストレの計算をやらせるのに、ブック2枚を頻繁に行ったり来たりさせるようなモジュールはやはり相当遅くなるのでしょうか? A:計算する元の四本値データだけ入ったブック。(シートが35枚あって、それだけで既に80MBのサイズ) B:Aから計算結果だけを出力させるブック。 一枚に詰め込むべきか、複数枚に分けて管理すべきか・・・
571 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:11:19 ] >>570 単にデータを読み書きするだけなら大して遅くはならない。 いちいちSelectとかActivateとかやっちゃうと遅くなるんで、そうしないように注意してプログラムを作ればいい。 あとは、オブジェクト型変数とかWith句をできるだけ活用すること。 計算中は余分なイベントを止めるのもそこそこ効果がある。
572 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:14:14 ] >>569 質問の1行目だけ見ると答えはNO。 だけどたぶん、別の方法でできることをわかってないだけの気がする。
573 名前:デフォルトの名無しさん [2010/03/16(火) 18:38:49 ] VBAでFX自動売買ソフトを作る事って可能でしょうか? やりたい事 ・業者orヤフー等からのレート取得 ・発注機能 こんな感じです
574 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:42:34 ] 可能です
575 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:46:01 ] 是非作ってみたい もしくはどなたかに作成していただきたいです MT4だと業者に対応していないので・・
576 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:00:54 ] プログラムもわからんのにそんな事言っててもどうしようもないと思うが んで、誰がただでやるわけww?
577 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:13:48 ] >>570 株価データの保存はDBに任せて、Excelは計算に専念させた方がスッキリすると思うけどね
578 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:17:59 ] Cells(1, 2) = Cells(1, 1) というマクロを作ったのですが、Cells(1,1)の文字数が多すぎると #VALUE! というエラーが出てしまいます。 Cells(1, 1)の値を他のセルにコピーするにはどうすればいいのでしょうか。
579 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:27:13 ] まずは仕様書を書いてね そしたら見積もり出すから
580 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:28:36 ] >>578 そのエラーは文字列の長さとは直接は関係ありません。 まずB列の幅を広げて、セルB1の書式を確認してください。
581 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:58:02 ] >>578 当方の環境下では Cells(1, 2) = Cells(1, 1) だと 半角256文字以上で#VALUE! になるね Cells(1, 2).Value = Cells(1, 1).Value だと大丈夫みたい なぜかしらんけど つか.Valueを付けるのが本来の使い方なんだけどね
582 名前:デフォルトの名無しさん [2010/03/16(火) 21:29:59 ] >>570 ADOつかてSQL書けよ
583 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 22:30:23 ] >>581 XP、2003だけど下記コードでエラー出ない。 なんでだろ? Sub test() Cells(1, 1) = String(257, "あ") Cells(1, 2) = Cells(1, 1) End Sub ↑どっかおかしい?
584 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:39:38 ] >>583 これでやったら912文字のところでエラーになった Sub test() For r = 1 To 1000 Cells(r, 1) = String(r, "あ") Cells(r, 2) = Cells(r, 1) Next End Sub
585 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:51:17 ] >>575 50万くらい出す気あるなら話聞いても良いよ。
586 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 02:10:47 ] >>584 Sub celltest() Cells(1, 1) = String(910, "あ") Cells(1, 2) = Cells(1, 1) End Sub 910文字まではOKってことだな。 >>578 と>>581 はどういう現象なんだろ?バージョンの問題かな?
587 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 03:01:12 ] いや、911文字までOK。 ていうか、みんなOSとExcelのバージョンぐらい書こうよ。 うちはXPと2003。 ちなみにVBAを使わずにセルに直接入力した場合は1セル32767文字まで入る。 ttp://office.microsoft.com/ja-jp/excel/HP051992911041.aspx
588 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 03:15:21 ] >>587 ん? >>584 だと911行目でエラーが発生してるから 911文字はエラー、910文字まではOKってことじゃないの? OSとバージョンが同じだから、やっぱりバージョンの問題なんだろうな。
589 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 03:22:49 ] doudemoii
590 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 12:25:45 ] どうでもよくない。 >>578 と>>581 の状況が再現できないと回答もできないし、 自分が同じトラブルに遭う可能性だってあるわけだから解決できないと気持ちが悪い。
591 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 12:47:26 ] >>589 だんだん話しについていけなくなっちゃったんだろうなw
592 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 14:51:07 ] 気持ち悪いから>>578 早く戻って来い!
593 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 16:29:57 ] >>581 で再現できてんじゃん
594 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:26:31 ] で、解決方法は?
595 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:31:37 ] 再現できないとか言ってるから、再現できてると言ったまで。 >>581 によれば、Value付ければいいんじゃないの?
596 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:47:44 ] >>594 Cells(1, 2) = Cells(1, 1).Valueにすればいい。 Cells(1, 2) = Cells(1, 1)と何が違うのかは知らん。
597 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:53:15 ] 解決できないから気持ちが悪いんじゃなくて、解決できてるけど仕組みがわからなくて 気持ちが悪いんじゃないの?
598 名前:デフォルトの名無しさん [2010/03/17(水) 18:11:26 ] 初歩的な質問ですんません セルに直接入力せずに三角形みたいなのをクリック(セルをクリックすると現れる三角形)すると あらかじめ設定してた項目を取り出せるあの機能はなんて名前でしったけ? またその設定はどこでやればいいですか? お願いします。vista使いです
599 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:16:36 ] >>598 ひょっとして、これのことか? Excel講座 > セルをコンボボックスにする www.serpress.co.jp/excel/no004.html
600 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:35:25 ] うちだと910文字超えないとエラーにならないのに、 どうして>>581 は256文字でエラーになるの? もうちょっと再現の条件とか手順をkwsk
601 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:45:27 ] >>599 そうそうそれそれ どうもすんません
602 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 19:41:37 ] >>598 セルにコンボボックスを仕込むより入力フォームを作って ボタンぼんでシートに値がコピーされるように作った方がいいと思うが。
603 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 20:40:45 ] テスト
604 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:04:36 ] Excel2007 ブックを新たに作成するときにシートの枚数を3枚とか指定することは出来ないのでしょうか?
605 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:19:57 ] テンプレートで
606 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:20:48 ] >>604 Application.SheetsInNewWorkbook = 3 こういうこと?
607 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:23:33 ] あ?テンプレの話? 2003だと ツール→オプション→全般→新しいブックのシート数 で設定できる。2007はわからん。
608 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:28:37 ] >>606 それです。ありがとう テンプレートは?状態ですけどw
609 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:30:49 ] >>608 とりあえずググれよ。(もう見てないだろうが・・・)
610 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 06:32:14 ] >>600 どうしてExcelのバージョンすら明記しないのか不思議。馬鹿?
611 名前:デフォルトの名無しさん [2010/03/18(木) 13:18:25 ] >>610 話の流れからすると910文字までいけるのは、XPで2003だって二人が書いてるぞ。 バージョン明記してないのは質問者と>>581 の解答者だ。 それはそうと、これだと10000行までいけるなw Sub test() For r = 1 To 10000 Cells(r, 1).Value = String(r, "あ") Cells(r, 2).Value = Cells(r, 1).Value Next End Sub
612 名前:611 [2010/03/18(木) 13:44:40 ] おっと、>>611 はXPで2003だ。 ちなみに、Win7の2007でも検証してみた。 ・Valueあり→10000行までいけた ・Valueなし→8203行目でエラー という結果。2007だとValueなしでもこんなにいけるんだなw ってことは、質問者のバージョンは2002以前とエスパーしてみる。 それにしても、2007のVBEどっから起動するのかわからなくてビビったw
613 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 15:21:35 ] >>611-612 >>600 の「うち」の環境を書けと言ってるんだ、馬鹿。 じゃなければ、第三者が全体を把握できないだろ。
614 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 15:41:08 ] >>611-612 Value付ければいいって結論が出てるのに、いつまで何やってんの?
615 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:06:15 ] >>613 >>600 は、910文字超えないとエラーにならないって書いてあるから 流れから2003だってわかると思うが? 流れを読まなくてもわかるように、レス内に明記するのがネチケット(笑)ということなら、 まぁ、そういうことなんだろうw >>614 Valueは単純に“省略可能なもの”と認識してたんだが、 今回のケースで言うと、場合によっては省略してはいけないってことか? すまん、素人にもわかるように説明してくれ。
616 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:13:20 ] >>615 とことんアホだな。 仮にExcel 2003が911文字目からエラーになるということだとしても、 911文字からエラーになるからといってそれがExcel 2003とは限らないだろ。 高卒文系なのか? 何かを明らかにしたくてその話題に参加し、なおかつ相手に再現の手順を求めるのなら、 まず自分の情報を出せっつーこった。 > すまん、素人にもわかるように説明してくれ。 知るかアホ。 このスレは素人の好奇心を満足させるスレじゃねーよ。
617 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:19:38 ] >>611 ド素人はこれだから困る。 セルに設定出来る最大文字数はヘルプにちゃんと書かれてる。 ヘルプ見ろ。
618 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:24:40 ] エクセルVBAに詳しい人教えてください! yutori.2ch.net/test/read.cgi/morningcoffee/1268888151/
619 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:32:09 ] いつまでやってんだよ……
620 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:32:10 ] >>616-617 論点がずれてますよ。 人のことを馬鹿とかアホとか高卒文系とかド素人とか言ってるけど、 話の内容を理解できていないのは、あなたの方ですね。 何かを明らかにしたくないなら、あなたはこの話題に参加しなくてもいいと思います。
621 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:37:10 ] ずらしてんのはお前の方だ馬鹿。 これになんかコメントしてみろ、アホ。 > 仮にExcel 2003が911文字目からエラーになるということだとしても、 > 911文字からエラーになるからといってそれがExcel 2003とは限らないだろ。 > 高卒文系なのか?
622 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:38:03 ] >>618 ソース見てボタンの名前調べればいいんじゃないの? そんな単純なことじゃなくて?
623 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:38:50 ] ・Valueを付ければ問題ない ・Excelの仕様上、何文字まで設定出来るかはヘルプに書かれている これ以上、何を知りたいの?
624 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:41:05 ] 話の流れからするとw、>>600 =>>611 じゃねーの? 馬鹿と言われて悔しかったのかな?
625 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:41:30 ] >>621 hideyoshi.2ch.net/test/read.cgi/mental/1266008088/l50 とりあえず筋トレでもしてみたら?
626 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:45:40 ] おまいらいつまでやってんだwwwwwwwwwwww
627 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:50:36 ] >>625 反論不能か、高卒文系のド素人が。 もう黙っとけ。
628 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:57:30 ] VBAからGroovyのプログラムを呼びたいんですが、何か方法はありますか? Groovyに限らず、VBAから他の言語のプログラムを呼んで、返り値を使用する ことってできるんですかね?
629 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:58:28 ] 一つのセルには200文字も必要ねーな。 50文字でも十分じゃね? 数式厨には足りないかも知らんけどw 超長ーい数式を得意としてるやつもいるからな。
630 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:05:02 ] >>621 必死ですね。コメントを求められているのでレスしますね。 その事象が起きるからといって、Excel2003だという証明は私には出来ません。 学歴も聞かれてますね。おっしゃる通り文系ですが大卒です。 これでよろしいでしょうか?
631 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:06:40 ] だよな。表計算ソフトなんだから50文字でも多いぐらいだ。
632 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:09:01 ] 超長〜い数式は勘弁してほしいw
633 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:18:44 ] 超長ーい数式とか配列数式とかSUMPRODUCTのフィルコピーが大好きなやつはほとんどアホばかり。 VBAで言えば変数使わないで何度も同じ値を取得してるようなもんだ罠。 数式でやるならVBAの変数に相当する作業セルを使えってこった。
634 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:22:44 ] >>623 もういい加減アホとか言うのやめれ。
635 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:25:04 ] ん?俺のことかな すまん、今度からヴァカと書くことにするわ。
636 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:27:44 ] >>630 証明できるかどうかなんて聞いてないんだよ。 >>615 > 流れから2003だってわかると思うが? わかると思ってるなら、それは馬鹿ゆえだってことだ。 横からノイズ増やしといて、俺の知りたいことだけお前ら教えろとかいう奴はいらないんだよ。 わかった?
637 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:31:39 ] ふぁいと! 俺は50文字でも十分すぐるから興味ナス
638 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:32:35 ] >>630 お前も必死だよwww
639 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:34:53 ] 大卒文系って、裏・逆・対偶レベルの論理学も理解できないの? 今はやりのゆとりって奴?
640 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:36:20 ] まぁ餅つけ 50文字でも十分ということで糸冬了
641 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:39:24 ] まぁ、セルに表示できないような文字数を設定するというのは、基本的な使い方では ないわけだから、自分がそのような処理を実装しなければならなくなったときに、 ターゲットとなるExcelの仕様上の制限を調べ、テストを十分にやれば良い。
642 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:41:21 ] 必要条件と十分条件を良くわかってない馬鹿SEのことを思い出した。
643 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:43:09 ] CellsのデフォルトプロパティがValueじゃないってことじゃないかと思うけど、 調べるつもり無し。
644 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:51:55 ] Cells(2, 1) = Cells(1, 1) でエラーが発生するとき、 Range("B1") = Range("A1") でもエラーが発生するね。 何故なのかはそれほど知りたくないけど、RangeのデフォルトプロパティはValueだって 思ってたので、ちょっとキモチワルイ。 やっぱり Range("B1") = Range("A1").Value と書くと動く。 まぁ、デフォルトプロパティは使うなってことかな。
645 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:52:57 ] スレが伸びてると思ったら一人で暴れてるようだな。 文体でバレバレだw
646 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 17:57:50 ] >>644 セルの文字数についてはバージョンによる違いだってわかるけど、 Valueの省略については色々調べてもわからなくて、昨日からずっと気持ち悪い。 納得できる答えをくれる神は降臨しないかと待ってるんだけど スレ覗く度に荒れる一方で(ry
647 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:22:47 ] >>646 納得できる答えが見つかっても、安全側に倒してデフォルトプロパティに頼らない コードを書くしかないという状況は変わらないよ。
648 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:24:50 ] >>645 バレバレw
649 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:29:42 ] まぁどっちもひといが、この板的にはこれが一番ひどい。 >>611 >それはそうと、これだと10000行までいけるなw
650 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:38:10 ] 例えば Sub test() MsgBox TypeName(Range("A1").Value) MsgBox TypeName(Range("A1")) End Sub とやると Empty Range となる
651 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 19:46:05 ] >>650 だから?
652 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 19:54:40 ] >>611 にガン擁護された>>600 は、どのような登場の仕方をするのであろうか。
653 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 20:44:22 ] >>623 256文字でエラーになるExcelのバージョン
654 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:07:40 ] >>653 え!?それかよっ!!www
655 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:27:05 ] >>653 うち Excel2003(XP) と Excel97(Win98)あるんだけど Excel97(Win98) だと256文字でエラーになる
656 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:48:24 ] 哲也君がVBAマクロを2昼夜かけて作ったんですよ。 これが本当の「マクロ 2夜連続」なんつって。
657 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 02:04:41 ] >>653 だったら、初めから自分の環境の結果を書いとこうね。 俺は何もしないけど、お前ら俺の知りたいことを教えろパターンですな。 ちなみに俺は、これまで出ていないExcel 2000を持っていて実験もし結果もわかったが教えない。
658 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 06:32:11 ] 俺はウチとまったく同じ環境の結果がガイシュツだから書かなかっただけなんだけど、 同じことを何度も書かなきゃいけないの? 役所に出す書類だな、まるで。
659 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 06:38:42 ] それが知りたいんだったら、既出の情報をまとめるなりなんなりしろよ。 餓鬼かよ。
660 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 07:31:23 ] 私女だけど、たった1行の実験結果を書かずに言い訳を何行も書く男の人って
661 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:40:37 ] まとめなきゃ把握できないほどの情報量か? 数えてないけど3例ぐらいしか出てなかっただろ。
662 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:55:26 ] XP 2003です ググっても中々みつからないんだけど、 手動で選択したセル範囲の数字を一気に計算(仮に10倍)とかするのってVBAで出来るの? あとついでに、セル範囲の一番右下の座標も取りたいんだけどやり方教えてください。
663 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 09:11:53 ] >>661 いつまでやってんだ
664 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 09:13:07 ] >>662 前半:できる。rangeを関数の引数に取りfor each 後半:一発でできるかどうかは知らん
665 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 09:15:03 ] >>682 VBAでもちろん出来るが手操作でも出来る。 どっかのセルに10と書いて、コピー、形式を選択して貼り付け、乗算 一個の選択した矩形範囲の右下隅のセルを操作したければ Selection(Selection.Count).**** Excel2003はこれで大丈夫だが、Excel2007は全セルを選択したとき CountプロパティがLong型なので入りきれなくてエラーになる。 そこまで考慮するなら With Selection .Item(.Rows.Count*.Columns.Count).**** End With 座標って行番号とか列番号とかアドレスが必要なケースは滅多にないだろう。 全くないというわけではないが。
666 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 09:15:04 ] >>661 ほら、お前もスレを確認しないと状況がわからないだろ。 >>653 の知りたかったことなんて誰も知らないんだから、状況をまとめて あとこのバージョンの動作を教えてくれってやるのが筋。
667 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 09:59:47 ] >>653 Excel 2000では256文字目でエラーになる。 これで全部揃った?揃ったならまとめくらいしてもバチはあたらないよ。
668 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:08:55 ] Excel95がまだ出てなーなw
669 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:26:54 ] だれか知ってる人がいたら教えてくれ。 A1の表示形式がG/標準のとき Debug.Print Format(Range("a1"), Range("a1").NumberFormat) とやると"M32032ral"が返るんだが、これって何?
670 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:28:49 ] いかん、Valueつけるの忘れたわ
671 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:31:38 ] A1の値を書くのも忘れたわ 1の場合ね
672 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:38:56 ] >>669 知ってるのか知らないのかわからないが、それ、Formatの第二引数の指定方法が間違ってる。
673 名前:デフォルトの名無しさん [2010/03/19(金) 11:18:49 ] 競艇のネット自動投票プログラム作っています。自動ログインは完成しましたけど、 次の画面の投票する競艇場選択のボタンを押す方法が分かりません。 押したいボタンのHTMLソースは以下 <input value="福 岡" onclick="jyocd(22)" tabindex="2" type="BUTTON"> ボタンの名前(name)が無いから通常のやり方ではできません。 また、 SendKeys "{TAB 5}" SendKeys "{ENTER}" で5番目の競艇場をクリックではできましたが、最終レースが終わると その競艇場選択ボタンが消えますので、必ずしも××競艇場が5番目とは限らないのです。 検索等で昨日1日中調べてみましたが解決しません。。。助けてください。
674 名前:デフォルトの名無しさん [2010/03/19(金) 12:08:09 ] データについているハイパーリンクの中の数字を取り出して(〜info.php?chr=25121とあったら568311)、もしAという数字だったら、その列の情報を全て、シートAにコピー という仕組みを作りたいと思っております。 ハイパーリンクの中の数字を参照するには、どうしたらよろしいのでしょうか?助けていただけると助かります。
675 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 12:57:29 ] >>672 どこが? まさかNumberFormatLocalってんじゃないだろうね。 もしそう思ってるならそっちが間違ってる。 そんなことはないとは思うけど。
676 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 12:58:20 ] まとめました。扱える文字数はバージョンの違いってわかるんですけど、 何故Valueを省略するとエラーが出るのか、どなたか教えて頂けませんか? 【バージョン不明】 256文字以上でエラー >>578 (質問者)、>>581 、>>596 911文字以上でエラー >>600 【バージョン記述あり】 Win98&97(256文字以上でエラー) >>655 OS不明&2000(256文字以上でエラー) >>655 XP&2003(911文字以上でエラー) >>583 (>>588 ?)、>>584 (>>587 ?)、>>586 Win7&2007(8203文字以上でエラー) >>612
677 名前:676 mailto:sage [2010/03/19(金) 13:01:21 ] 訂正ですorz OS不明&2000(256文字以上でエラー)は>>667 でした。
678 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 13:14:44 ] あぁ分ったわ。 NumberFormatは"General"だから Gは元号のGで明治だからM eは和暦の年 nは分 eは和暦の年 ralはGeneralの右3文字だな。 結局Formatじゃ駄目でWorksheetFunction.Textってことか。 俺の間違いだったわ。
679 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 14:42:54 ] >>678 いやいや、ヘルプ見ろよ
680 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 14:46:07 ] >>676 それ多分OS関係ない。 > 何故Valueを省略するとエラーが出るのか、どなたか教えて頂けませんか? 多分、今ここにいる奴は答えられないから、これまでに回答がないんだよ。 モーグにでも行けば?
681 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 17:50:13 ] >>674 > chr=25121とあったら568311 の法則がよくわからない。 Aは数字じゃない。 16進?でもなそさうだし。
682 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 17:53:43 ] >>679 FormatもWorksheetFunction.Textも似たようなもんだろうと思ってた俺が 馬鹿だったが、Formatのヘルプの表示書式指定文字なんて一部しか載ってないね。 とりあえず"s","h","n","g","aaa"などが抜けてる。 "General"はWorksheetFunction.TextにはあるがFormatにはないということだな。
683 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 18:01:50 ] 範囲指定していっぺんに10倍はVBAでもできる。 「形式を選択して貼り付け、乗算」をマクロの記録してみ。
684 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 18:12:10 ] Formatのヘルプの最後にある表示書式指定文字だが、あれは一覧じゃなかったか。
685 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 18:14:19 ] >>682 ホントだ。ローカルのヘルプは抜けてるのがある。 オンラインヘルプなら全部出るみたいだけど。
686 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 18:26:38 ] >>682 あと"p"とか"ccc"とか"ooo"とか"ww"とかもあるみたいね。 Format(1,"ww")が53、Format(1,"www")が531になるがなんのこっちゃ。
687 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 18:47:18 ] "p"じゃなくて"q"だったわ。 "ccc"も"c"ね。 Format$(シリアル値,"yyyy/mm/dd")とするところを Format$(シリアル値,"c")としても同じみたい。 >>685 オンラインのヘルプどこ? さっきから探してるんだが見つからん。 MSDNかな?
688 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 18:54:35 ] cはcountryのcだと予想して地域オプションをいじくってみたら、案の定 Format$(シリアル値,"c")は必ずしもFormat$(シリアル値,"yyyy/mm/dd")と 同じじゃなかったわ。
689 名前:662 mailto:sage [2010/03/19(金) 19:51:07 ] >>664-665 回答ありがとうです。本当にたすかりました。 面倒なんで「(どっかのセルに10と書いて)コピー、形式を選択して貼り付け、乗算」をマクロ記録させてそれでやり過ごしました。
690 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:03:49 ] Formatの奴うざいよ? Valueの奴と同じちゃうんかと思われるレベル。
691 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:15:38 ] うざくてすまんね。 Value関連は考えすぎだな。 629と633と637は俺だけどな。
692 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:21:00 ] というわけど、今後は>>690 のハイレベルな回答を期待しましょうねw
693 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:38:21 ] ヘルプ見ろでFAだろ。 質問者はまだ見れてないようだが。
694 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:42:05 ] めんどくさいけど探してやった。 ほれ。 msdn.microsoft.com/ja-jp/library/59bz1f0h (VS.80).aspx
695 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:47:20 ] それVBAも一緒なの?
696 名前:デフォルトの名無しさん [2010/03/19(金) 20:51:40 ] ブイバのことは俺に任せろ!
697 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 21:04:53 ] >>693 クソ生意気な奴だなぁ。 ヘルプくらいは真っ先に見てるさ。 俺の見れるヘルプにはcやwwwは見れないんだよ。 お前がそういうなら探せばどっかにあるんだろうけどね。 Formatで検索して出てくる下には書いてない。 Format 関数 ヘルプ > 関数 > D-G Format 関数の使用例 数値表示書式指定文字 (Format 関数) 文字列表示書式指定文字 (Format 関数) 数値を表すその他の書式 (Format 関数) もうどうでもいいけどな。
698 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 21:09:18 ] >>694 お、ありがとう。 そこにあったか。 どうでもいいと書いたがこれから見るわ。
699 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 21:14:54 ] >>693 =694の俺なんですが・・・
700 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 21:18:56 ] なんというツンデレ!! おまいら何やってんだよwww
701 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 21:25:30 ] >>699 ふーん? 結局お前もまともにヘルプ見てなかったと言うことかw >>694 もリンク先見たけど、cやwwwは載ってないわ。 ExcelヘルプでFormatで検索しても出てこなかったが、表示書式指定文字で検索したら出てきたよ。
702 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:21:05 ] >>701 日付の書式のヘルプ初めて見たよ。 cとかooooとかwwとか今まで知らんかった。
703 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:35:11 ] >>702 同じく。 しかしヘルプでFormatじゃなくFormat関数と最後まで打てば日付関連の書式は出てきたな。 手抜きはいかんな。 またうざいとか言われるからこのへんにしとくよ。
704 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:53:23 ] >>703 「Format 日付」でも出てくるよ。 間にスペース入れればAnd検索だな。
705 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:16:10 ] >>704 トンクス Formatだけでも2ページめにあったね。 ヘルプはカーソル当ててF1しか普段使わないから、オンラインヘルプの使い方知らなかった。
706 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 02:51:23 ] いつからこのスレは自分が発見したことのメモ帳になったんだ
707 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 02:53:16 ] >>701 で、結局そのヘルプのありかをこのスレにフィードバックするつもりは無いのか。 やっぱValueの奴とレベル一緒だわお前。
708 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 03:37:26 ] >>672 でちゃんと使い方が間違ってると教えてもらってるのに、何なのこいつ。
709 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 07:56:45 ] >>672 >>669 だが、夜会合ですぐレス書かなくてすまんな。 ヘルプは>>671 や>>704 のおかげで読めたよ。 俺も実は探せてなかったもんでね。 ヘルプ読めと言いながらVBAのヘルプじゃないものを教えた人もいたみたいだが。
710 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 08:02:40 ] まちがった >>701 や>>704 のおかげな
711 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 08:09:44 ] >>707 ヘルプのありかは>>701 はフィードバックしてるんじゃね? 表示書式指定文字で検索って書いてあるし。 Excelヘルプをオンラインヘルプに読み替えればいいんじゃね?
712 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 10:14:12 ] ヘルプ見ろで切れまくる奴はいるは、ヘルプ見つけられない奴続出だわ、レベル低すぎ。 お前ら一体今までどうやってプログラミングしてたんだよ? 何でもググってコピペしてたんじゃねーの?
713 名前:デフォルトの名無しさん [2010/03/20(土) 10:14:17 ] エクセルVBAであるサイトのラジオボタンを自動で選択するマクロを作っているんだけど その方法が検索で調べた方法じゃできなくて困っています。 HTMLのラジオボタンの部分のソースは <input name="kumiban1" value="1" onclick="check1(this)" tabindex="3" type="RADIO"> となっています。 "kumiban1"のvalue="1" をクリックしたいのです。
714 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 10:37:36 ] >>713 同じページ内に同じ名前の name="kumiban1" が複数あった場合は objIE.document.all("kumiban1") だとエラーになる。 そういう時は objIE.document.all("kumiban1")(0) 、objIE.document.all("kumiban1")(1) のように番号を付ける。 自分のチェックしたいボタンが何番目かは自分で調べてね。
715 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 10:50:18 ] >>712 まぁまぁ、レベルの高いと思われる>>694 でさえ見つけられなったんだから。 俺もF1キーで大体事足りてるしね。 ところで2010では有名なFindメソッドの使用例の間違い、直ってるか誰か知らない? 俺未だにISDNだからベータ落とせない。 前トライしたら途中で切れてばっか。
716 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 10:53:30 ] >>712 コピペでマクロ作って社内で高評価 ↓ 自分で考えなければできないようなことをさせられる ↓ コピペ技術だけじゃどうにもなんねぇ・・・でもまともに組んだことねぇ ↓ そうだ!聞いて教えてもらう←いまここ ↓ 結局できない ↓ 評価右肩下がり
717 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 10:54:51 ] >ISDN マジか!! まだいるんだなぁ… テレホ思い出したわ つうか、ネカフェとか行ってDLしてくりゃいいんじゃねぇの?
718 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:10:16 ] かわりにダウンロードしてくれる友達とかいないの?
719 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:12:59 ] >>717 そんなものあったらすでに行ってるよ。 こちとらド田舎離島だからね。 今度弟にDLしてもらって郵送してもらうかな? 来年は光が開通するんだが。
720 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:14:44 ] >>718 リロードしなかった。 >>719 のとおり。
721 名前:デフォルトの名無しさん [2010/03/20(土) 11:24:21 ] >>714 >番号を付ける の記述はどうやるんですか?
722 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:33:19 ] >>721 えっ 回答にちゃんと番号付いてるやん
723 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:34:30 ] >>715 なんで>>694 がレベル高いことになってるんだかさっぱりわからんが、F1で事足りないときの 対処法を言ってるんだが。馬鹿(694)が一人でもいると、自分がマニュアル見ないエクスキューズになるのか?
724 名前:デフォルトの名無しさん [2010/03/20(土) 11:36:25 ] >>722 いや構文の記述法がよく分からないのです
725 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:40:09 ] プログラマー RTFMは 遠くになりにけり
726 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:44:44 ] >>723 レベルが高いをまじにとったか。 昨日Value関連でさんざん罵倒してたのが彼だと思ったからちょい嫌味で書いただけ。 人違いだったらごめんな。
727 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:49:06 ] >>724 ブラウザをコントロールする方法はいくつかあるから、 まずは自分のやりたい方法というか、試してだめだったプログラムをここにアップして。 そしたら修正点を書くから。
728 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:53:56 ] ってかここカルシムム不足がいるよね。 あーいえばこういうし困ったもんだ。
729 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:59:21 ] 牛乳飲もう
730 名前:デフォルトの名無しさん [2010/03/20(土) 12:05:08 ] >>727 いくつか試したんですが例えば↓こんな感じです。 Dim objIE As Object Dim objITEM As Object Dim nNO As Integer Dim strRADIO(0 To 5) As String strRADIO(0) = "1" strRADIO(1) = "2" strRADIO(2) = "3" strRADIO(3) = "4" strRADIO(4) = "5" strRADIO(5) = "6" nNO1 = 1 On Error Resume Next For Each objITEM In objIE.Document.all If objITEM.TAGName = "INPUT" Then If objITEM.Name = "kumiban1" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True End If End If Next
731 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 12:26:28 ] >>728-729 まったく関係ないけど、それ俗説だから。
732 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 12:39:24 ] アホがアホって言われることが気に入らない奴が居るみたいね。
733 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 12:40:04 ] >>731 そうかカルシウムじゃ駄目なのか。 もう駄目かも知らんね。 もともとプログラマーは廃人が多いんだが。
734 名前:デフォルトの名無しさん [2010/03/20(土) 15:17:17 ] すみません、A列目の値が x で、1行目の値が y となるようなセルを探すのは VBAでできますか?Excelの機能だけでもできますか? どんな関数を使えばいいかヒントをください。検索します。
735 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 15:25:25 ] >A列目の値が x で、1行目の値が y となるようなセル ??????????????
736 名前:734 mailto:sage [2010/03/20(土) 15:34:52 ] すみません、A列の値と1行目の値をキーとして交差するセルを検索したいのです。
737 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 15:38:47 ] ctrl + Fで検索すればいいんじゃないの? つか、ここはVBAの質問スレだぞ。
738 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 15:47:57 ] すみません、そのセルの値をプログラム的に参照したいということです。
739 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 15:54:08 ] A列の値と1行目の値をキーってのがわからない 例をしめしてちょ
740 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 16:07:06 ] >>734 どうかな? Do While セルの値が空白になるまで if セルの値が"x"の場合 セルの位置を取得してLoop終了 end if 一つ次のセルへ移動 Loop
741 名前:740 mailto:sage [2010/03/20(土) 16:28:45 ] 考え方は以下の手順でよろしいかと。 A列を検索し、"x"の入っているセルの行番号を取得 1行を検索し、"y"の入っているセルの列番号を取得 Cells(行, 列).Value で目的のセルの値を取得
742 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 16:40:39 ] worksheetfunctionでlookupとかじゃだめなの? 質問者のレベル的にそこまで難しいことをしてなさそう。
743 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 16:52:32 ] でも、質問があると速攻答えてくれるお前らは何だかんだで根はいい奴等だと俺は思ってるんだからね///
744 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 16:59:13 ] >>713 ,730 コピペミスだと思うけど <input name="kumiban1" value="1" onclick="check1(this)" tabindex="3" type="RADIO"> を対象なら >>730 は 誤 nNO1 = 1 正 nNO = 0 ではないかな これでチェックが入るはず その上でonclick="check1(this)"を作動させたいのであれば objITEM.Checked = True を objITEM.Click に変更してみては?
745 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 18:44:50 ] 下手な言葉で説明されるよりも具体例を出して何をしたいのかを言った方が遥かに早いと思うぞ >>734
746 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 18:57:12 ] 質問です。 決まったセルの位置をVBAで扱う場合、 私は下記のように定数定義して使っています。 Public const 合計金額欄 As String = "D8" この方法は、 Range(合計金額欄) には良いのですが、 Cells(r, c) で使いにくい欠点があります。 みなさんはどんな風に位置を定義していますか?
747 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 19:30:22 ] >>746 極力マジックナンバーや文字列リテラルをコードの中に入れないと言う 方向性はいいけど、度が過ぎるとくどいコードになるから嫌われるよ。 セルくらいはコードの中でオブジェクト変数に Set c = Range("A8") と書いてcを使い回せばいいじゃん。 多くのプロシージャで定数の合計金額欄を使いたければ 各プロシージャの 中でオブジェクト変数に Set c = Range(合計金額欄) などとセットしてcを使い回せばいい。 CellsやRangeを頻繁に使うコードはあまりきれいじゃないから。
748 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:01:14 ] プロシージャの先頭で Set c = Range(合計金額欄) みたいにして、実際の処理にはcを使うようにすればいい。
749 名前:デフォルトの名無しさん [2010/03/20(土) 21:04:11 ] 「名前」を挿入しろよ
750 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:19:53 ] >>725 2010のFindメソッドのヘルプは相変わらず間違ったまま。 直す気はさらさらないんでしょうね。 2002のころから報告は山ほどいってるはずなのに。 あと静かになったところを混ぜ返すのもなんだけど >>669 ,>>672 別にFormatの第二引数の記述が間違ってるわけではないでしょう。 ご本人が>>678 で書かれてるように第二引数の書式にそって出力 されてるだけだから。 Format(Range("a1"), Range("a1").NumberFormat) すなわち Format(1, "General") すなわち"Genaral"の左4文字は書式指定文字で Format(1, "Gene"""ral""")と同じ。 シリアル値の1は1899/12/31(明治32年12月31日)だから 書式にそって"M32032ral"が出力された。 別に記述が間違ってるわけではないですね。 "M32032ral"に意味があるかと言われれば何もないけど Format(値,Range(***).NumberFormat)って書き方は日付の値検索で 使うこともあるね。 長文失礼
751 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:25:00 ] わかった。 お前が一番のいらない子だ。
752 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:27:08 ] つか、暴言は気まくりの奴をなんで「ご本人」とか言ってるんだか
753 名前:746 mailto:sage [2010/03/20(土) 21:35:04 ] >>747 >Set c = Range(合計金額欄) なるべく上記のようにして変数で取り扱うようにしたり、 Withで記述を省略したりしています。 >度が過ぎるとくどいコードになるから嫌われるよ。 入力フォームと定数定義を作りながら、 だんだん動作と実装のイメージを固めてコーディングに取り掛かる、 という作り方をしてるorz。
754 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:38:09 ] >>750 何を言いたいのか良く解らないけど、それマニュアル読めば解決することだよね? マニュアル読めという回答はするなという主張なのかな。
755 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:48:26 ] ほとんどの質問はぐぐれば解決することだよね? 以下略
756 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:49:12 ] 暴言ねぇ、 そんなのどうでもいい。 仮に丁寧でも内容が間違ってれば駄目だから。 ヘルプ読めはべつにいいんじゃないの? ただ間違った指摘があったから書いただけ。
757 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:51:25 ] >>746 本当に決まり切った位置なら、セルに名前を付ける。 home.att.ne.jp/zeta/gen/excel/c03p05.htm そうじゃないなら、Rangeを返す関数を作ったり、そのRangeの値を返す関数を作ったりする。 function SumPriceRange() as range set sumpricerange = range("d8") end function function GetSumPrice() as long getsumprice = range("d8").value end function とか。
758 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 21:58:44 ] >>750 君って、printf("%d", some_pointer)で変な値が出力されるんですけど、とか聞かれたら、 どのような仕組みでその変な値になるか説明しそうだな。
759 名前:746 mailto:sage [2010/03/20(土) 22:09:56 ] >>757 セル範囲を管理するモジュールを1つ用意して、 その中にセル範囲を返す関数を並べ、 各プロシージャはそれを参照するという感じでしょうか?
760 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 22:12:32 ] >>750 669だけど、WorksheetFunction.Text(値,書式)のように返り値1を期待してのものだったので俺の間違いでいいです。 これ以上相手すると疲れるから。 降参です。
761 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 22:17:28 ] 自分で事を荒立てといて、なんていいぐさw
762 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 22:23:59 ] 最初のレスでG+e+n+e+ralで表示された結果って書いとけば良かったんだよ。 マニュアル読めとか出し惜しみすんなよ。
763 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 22:37:59 ] なんか再燃してるねぇ。 2chはこうじゃなくっちゃw >>752 暴言がどれをさすか知らんけど、クソ生意気と書いたのは俺で質問者じゃねーから。 >>762 出し惜しみする頭なんてあるわけないと思うw Formatの使い方よく知らないからヘルプヘルプとわめいてたんじゃね?
764 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 22:41:43 ] ヤレヤレ ┐(´ー`)┌ マイッタネ
765 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2010/03/20(土) 23:49:45 ] >>750 どうもです MSも相変わらずですか。
766 名前:デフォルトの名無しさん [2010/03/21(日) 10:49:19 ] >>744 でもダメですた。 競艇の自動投票を作っているんですけど競艇のサイトが特殊なのかな・・・ ラジオボタンのチェックが入りません。
767 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 10:58:32 ] >>750 何がどう間違っているのか書けよ屑
768 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 11:30:42 ] >>766 投票ページにアクセスするには会員登録が必要だろうから、 そのページのソースをどっかにアップしてくんない?
769 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:06:08 ] >>750 お前の存在が間違いじゃないの? そもそも荒れた原因はお前が最初にFormatのやつうざいと言ったからだろ? Valueから暴れてるよな? もういいから消えろ。 素人の好奇心云々や文系高卒やらさんざん暴言吐いてたのはお前だと思うが 素人はお前だ。 玄人と思ってるかも知らんけど、それは勘違いというものだ。 わかった?トウシロのぼくちゃんw
770 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:07:29 ] テンプレに、「まずOption Explicitをつけろ」も追加が必要だな
771 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:09:54 ] おーすまん>>750 上はもちろんトウシローの>>767 あてね
772 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:11:17 ] >>750 > 別にFormatの第二引数の記述が間違ってるわけではないでしょう。 これってへりくつって言うんですよ。 それに既に>>678 で説明済みのものを、自分の言葉で長々とかかずにはいられない ほど自己顕示欲をもてあましてるんでしょうか。
773 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:13:46 ] >>769 そんなに基本的な論理学もわかってなかったことを指摘されたのか痛かったのかな。 知らないことを教えてもらったという意味で、感謝されてもいいくらいだ。
774 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:13:54 ] 「間違いを訂正するときには、 名前欄に自分のレス番号を記入すること」も追加かな。
775 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:20:31 ] はっきり言って、>>2 にもあるように、Excelのバージョンくらい書くのがこのスレの礼儀だし、 まずヘルプを確認するのが常識なんだけど、それを指摘してる奴が痛すぎて、相対的に バージョンも書かない、ヘルプも読まない奴の方が正義っぽくなってる。
776 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:22:47 ] そいつの相手してる奴がこれまた痛いw
777 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:23:19 ] >>767 "M32032ral"って何かって質問だから>>762 を読めば? 何で出し惜しみしたの?
778 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:28:44 ] いろんな厨がいるが、ヘルプ厨ってのもいるんだなw
779 名前:744 mailto:sage [2010/03/21(日) 12:39:04 ] >>766 これ以上は自分の手に負えそうに無い感じだけど 最後に1点だけ If objITEM.Name = "kumiban1" And objITEM.Value = strRADIO(nNO) Then Debug.Print "ここに北" objITEM.Checked = True End If とかやってみ イミディエイトウインドに何も表示されないなら 対象タグを見つけられてない フレーム分割されているとかそんな感じじゃないのかな
780 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:42:42 ] >>777 俺は頭悪いからそんなこと分らないんだよ とにかくヘルプだヘルプ! VB.NETのヘルプじゃなくてVBAのヘルプな
781 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:49:17 ] わからなかったら素直にそういえばいいのに。 自分の無知を認めることも大事だ。
782 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 13:20:02 ] printf("%d", some_pointer)で変なマイナスの値が表示されることに 一生懸命説明する奴大杉。
783 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 13:32:05 ] 自作自演もほどほどにしようぜ
784 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 13:33:34 ] 必死だなw しかしまぁ流れを読んで見ると>>678 に対する>>679 が一番アホだな。 こういう馬鹿ヘルプ厨がいるからおかしくなるんだよ。
785 名前:679 mailto:sage [2010/03/21(日) 13:38:32 ] 今顔真っ赤です。 こうですか?わかりません(><)
786 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 13:47:38 ] >>785 お前は暴れてるやつの一人だと思ったが、ただ無知だっただけの善意の第三者か?
787 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 14:02:22 ] レスが集中してるから暴れてるのは一人か二人だと思う。 暴言吐いてる人が構ってチャンじゃないかな。
788 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 14:46:51 ] OAuthをExcelVBAで書きたいんだけれど サンプルどこかに転がってるでしょうか?
789 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 15:52:47 ] withevents を使用するために参照設定があれば教えてください また、使用方法の勉強に適したURLあればお願いします。
790 名前:766 [2010/03/21(日) 16:34:22 ] >>768 ソースアップしました。 firestorage.jp/download/90a5112c83637a3be41a86ca9723b61c6c7229b1
791 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 17:15:55 ] WithEventに参照設定要ったっけ?入れなくてもThisWorkBookモジュールに入れたら動いたけど あと、その競艇投票ソースとExcelとの関係は?
792 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 17:17:38 ] あ、それから説明サイトは、、、、 mougの即行テクニックで witheventsで検索すればちょろちょろと解説がある
793 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 01:55:13 ] VBAで練習用にマインスイーパ作った 他なんか勉強になって作って楽しいもんないかね
794 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 02:17:08 ] >>793 ゲーム作って勉強したいならこんなんあるみたいよ。 www.amazon.co.jp/gp/product/4844326864/
795 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 03:01:05 ] >>794 なんだかオモチャ臭がぷんぷんするけど どうなんだろうね
796 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 03:08:47 ] >>795 どうなんだろねー? 動画見たら、こんなんVBAで出来るの!?って興味持ったけど 値段高いからねぇ。 図書館で検索したけどなかったわw
797 名前:デフォルトの名無しさん [2010/03/22(月) 08:28:03 ] VBA、というよりはWin32APIを使いまくってるけどね ttp://gyouzausa.hp.infoseek.co.jp/mode1/GAME/index.html
798 名前:デフォルトの名無しさん [2010/03/22(月) 08:45:10 ] 初歩的な質問ですけど、教えてください '対象行をdataシートへコピーする Sub ColumCopy(ByVal cnt As Integer) Dim k As Integer Worksheets("data").Activate k = 0 Do k = k + 1 Loop Until Cells(k, 1) = "" Worksheets("Page1").Range(Cells(cnt, 1), Cells(cnt, 8)).Copy _ Destination:=Worksheets("data").Range(Cells(k, 1), Cells(k, 8)) Worksheets("Page1").Activate End Sub というのを作ったんです(cntには51という値が、kには1という値が入っています)が、 実行時エラー アプリケーション定義またはオブジェクト定義のエラーです でWorksheets("Page1").〜の部分で終了してしまってます どの様に直せばよろしいのでせうか?
799 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 09:38:03 ] すまん、俺のせいですげー荒れたみたいだな。 > 結局Formatじゃ駄目でWorksheetFunction.Textってことか。 > 俺の間違いだったわ。 ヘルプ見れば(もちろん679をレスした時点で俺はヘルプを見てる)、自分のやりたいことを Formatで実現するには"General Number"を指定しないといけないということに気づくんじゃ ないかと思ってヘルプ見ろって言ったんだよね。 次からは、ヘルプ見ろってつい言いたくなっても自重するよ。
800 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 09:42:47 ] もう一個言い訳しとくと、>>672 で > 知ってるのか知らないのかわからないが とつけたのは、1にならない理由がわからないのか、わざと定義されてない引数を指定したら 変な文字列になったけど、その変な文字列に変換されるロジックをしりたいのかわからなかった から。 多分前者だろうと判断して、こう書いた。 > Formatの第二引数の指定方法が間違ってる。
801 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 09:50:36 ] あと、>>675 でちょっとカチンときてしまった。ヘルプも見ない奴に言われたくないって。 愚痴ばかりですまん。しばらくこのスレの書き込み自重する。
802 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 11:52:04 ] >>798 CellsにもSheetを指定しなきゃダメ Worksheets("Page1").Range(Worksheets("Page1").Cells(cnt, 1), Worksheets("Page1").Cells(cnt, 8)).Copy _ Destination:=Worksheets("data").Range(Worksheets("data").Cells(k, 1), Worksheets("data").Cells(k, 8)) With Worksheets("Page1") .Range(.Cells(cnt, 1), .Cells(cnt, 8)).Copy _ Destination:=Worksheets("data").Range(Worksheets("data").Cells(k, 1), Worksheets("data").Cells(k, 8)) End With Dim Ws1 As Worksheet, Ws2 As Worksheet Set Ws1 = Worksheets("Page1") Set Ws2 = Worksheets("date") Ws1.Range(Ws1.Cells(cnt, 1), Ws1.Cells(cnt, 8)).Copy _ Destination:=Ws2.Range(Ws2.Cells(k, 1), Ws2.Cells(k, 8)) 好きな書き方でどうぞ
803 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 13:51:29 ] >ヘルプ見ろって言ったんだよね。 皆ヘルプ見て分からなかったから質問スレに書き込むんじゃないかな。 キーワードがヒットしなかったか、重要な情報を見落としたかはともかく。
804 名前:798 mailto:sage [2010/03/22(月) 14:10:23 ] >>802 Cellにも指定しないといけなかったんですか。 気が付きませんでした。 ありがとうです
805 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 17:23:03 ] Cell表記でいつも思うんだが Worksheets("data").Range(Worksheets("data").Cells(k, 1), Worksheets("data").Cells(k, 8)) より Worksheets("data").Cells(k, 1).Resize(1, 8) のほうがコード読み書きしやすくない?
806 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 17:32:39 ] ついでに言えばコピー先は左上だけ指定すればいい Destination:=Worksheets("data").Cells(k, 1).Resize(1, 8) ↓ Destination:=Worksheets("data").Cells(k, 1)
807 名前:デフォルトの名無しさん [2010/03/22(月) 17:47:27 ] workSheets(\\\"data\\\").select したほうが短くならない?
808 名前:デフォルトの名無しさん [2010/03/22(月) 18:22:09 ] VBAを学ぼうと本を買ってきたのですが、いざ読んでみたものの、 この次何をしたらいいかよくわかりません。 何をしたらいい?
809 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:36:00 ] PCを窓から捨てる
810 名前:デフォルトの名無しさん [2010/03/22(月) 18:42:57 ] >>809 (´・д・`)窓からPC捨てたら、VBAが学べるの?
811 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 20:21:37 ] >>805-806 同感 しかしクソIME(Microsoft Office IME 2007)は上の「どうかん」が変換できないよ。 他にも辞書登録しないと駄目なのがいっぱいあるが中国人に作らせたんじゃないだろうな。
812 名前:デフォルトの名無しさん [2010/03/22(月) 20:42:03 ] 2chとかに書き込む時はgoogleのが便利なのに(´・ω・`) 最近はちょっと軽くなったし
813 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 20:42:20 ] 中国人だよ。
814 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 21:32:01 ] テスト同感 >>812 Googleの日本語入力があるなんて知らなかったよ。 今ダウンロードして使ってる。 いいこと聞いたよ。 >>813 アチャー、中国神社無理もないな。 うーん、Googleも完璧じゃないな。
815 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:55:19 ] >>808 手段と目的が逆転した時は、まず目的を探せ
816 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 00:36:44 ] 「入門書はクリアしたので次のステップは何がよいでしょうか」 という問いかけかもしれん
817 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 02:13:17 ] >>816 じゃあやっぱり目的を探せであってるんじゃないか?
818 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 07:08:47 ] じゃあ次は中級の本を読めばいいんじゃね?
819 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:54:18 ] Cells(3,5*i-2)からCells(k,5*i+1)まで というように行位置と列位置で指定した範囲をコピペしたい場合 何かいい方法ありますか? 行位置と列位置からセル番地を求めて Range("○○:××")って形で指定くらいしか思いつかないんですが
820 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:57:09 ] >>819 CellsはRangeの範囲指定にそのまま使える。 Range(Cells(3, 5 * i - 2), Cells(k, 5 * i + 1)) と書けばいい
821 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 14:15:50 ] >>820 ありがとうございます!
822 名前:デフォルトの名無しさん [2010/03/24(水) 03:18:22 ] 教えてください。 office 2000、Win XP SP3です。 このようなことはできるでしょうか? ・マウスでセルをクリックすると、そのセルに、色が付くとか、あるいは●の文字が出る。 ・もう一度そのセルを押すと、色が無くなる(白になる)とか、あるいは文字が消える。 セルを、まるでチェックボックスに見立てたような動作です。 通常のチェックボックスをシート上に置けばよいのでしょうが、 行単位で、それぞれにチェックを付けたいのです。 そうすれば、行の挿入や削除したとき、チェックボックスも一緒に増減するからです。 このようなことがVBAでできるでしょうか? 宜しくお願いします。
823 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 04:05:05 ] >>822 無理。 Worksheet_SelectionChange、Worksheet_BeforeRightClick、Worksheet_BeforeDoubleClickなどで 代用する手はあるけど希望通りの動作にならなかったり副作用が出たりする。
824 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 04:13:30 ] セルのクリックってWin32APIでできそうなんだけどなあ。 需要もあると思うんだけど、検索しても見つけられないんだよな。
825 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 08:07:38 ] 2003 XPです Sub デイデータ制御() Worksheets("水産").Cells(5, 2).Select End Sub これを同じブック・違うシート上でやると実行時エラー1004が出ます。 あと、activate とselect って何が違うんですか?
826 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 09:37:56 ] >>825 activeは範囲選択したときのtabの動作 selectは左クリックで操作したときの動作 selectの方が早くて不具合も少なかったと思う 後マクロはシート1に Sub Macro1() Call デイデータ制御 End Sub 標準モジュールに Sub デイデータ制御() Worksheets("水産").Select Range("a1").Select End Sub と記述する。別シートを洗濯できないのはスコープの問題。 とりあえず簡単に、別シートのマクロは記述できないと覚えて置けば良い それでもWorksheets("水産").Cells(5, 2).Selectと一度に記述ができないのは何でだったかな 忘れた。
827 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 14:34:19 ] >>826 回答ありがとうございます。 一度に記載出来ないのは仕様だったのね・・・
828 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 16:56:07 ] 自動整形をやめる方法ってありますか? *はスペース hoge*=*1 hogehoge*=*1 でなくて hoge*****=*1 hogehoge*=*1 って揃えたいんですが
829 名前:デフォルトの名無しさん [2010/03/24(水) 18:17:14 ] FUNCTIONで関数を作っったら、ユーザー関数として使えるのでしょうか? 本では使えるようなことが書いてあるのですが、 関数の挿入のWINDOWでユーザー関数の項目が出てこないので選べません。 エクセルは2003で、超超・・(略)・・超初心者です。
830 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 21:55:11 ] とりあえず、>>1-7 見ような
831 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:48:52 ] >>828 無理
832 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:50:37 ] 特定の文字列が含まれているシートの特定のセルを参照して、それをフォームに一覧表示したいです。 すべてのシートから参照する方法は分かったのですが、特定の文字列を含むシートのみを抽出する方法が 分かりません。 なにとぞお願いします
833 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:51:13 ] >>829 使える 出てこないのはたぶんFunctionを書く場所が間違ってる
834 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:52:09 ] >>832 Find
835 名前:832 mailto:sage [2010/03/25(木) 01:31:19 ] すいません、具体性が足りませんでした。申し訳ないです。 例えば、○○○、□□□、○○○1、○○○2というシートがある時、 ○○○が含まれる3つのシートのC1の値を参照し、一覧にしてフォームに表示させたいのです。 私としては、foreachを使っていけば良いんじゃないかと思って考えてはいるのですが、具体的な形に ならないものではまって動けないという感じです。 知恵をお貸し下さい。お願いします。
836 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:51:53 ] ttp://officetanaka.net/excel/vba/function/InStr.htm
837 名前:832 mailto:sage [2010/03/25(木) 02:06:29 ] ヒントありがとうございます。また頑張ってみます。
838 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 16:41:54 ] ボタンをクリックして表示させるフォームに引数って渡せないでしょうか。 クリックしたボタンによって違う処理をしたいんですが、引数を渡せないと大量の同じようなフォームをできてしまうのでそれを避けたいのですが…
839 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:07:16 ] 継承が使えればformを継承し新しいクラスを作る もしくはshow関数をオーバーロード もしくはグローバル関数を使う もしくはテキトーなtextboxに値でもいれておき、それを参照するようにする 下に行くほど簡単。どれでも好きなものを
840 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:16:40 ] excel2007で質問させてください。 各シートから条件に一致したデータを抽出して印刷しようとしています。 印刷ひな形となるシートのコピーを作成して そのコピーしたシートにデータを書き込んで印刷→シート削除という流れなのですが worksheets(hoge).copyを使用すると Application.ScreenUpdating = falseにしていても 画面遷移が起こってしまいます。 画面遷移なしで処理したいのですが何か他に方法はありますか? ひな形シートの全セル選択で貼り付けると印刷設定が移動できませんし 印刷設定のプロパティも全部コピーしていくしか無いのでしょうか
841 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 02:13:27 ] ちょっとVBAに慣れると調子に乗って ExcelベースのGUIで便利なアプリにしてやろうなんて 夢想しがちだが、肝心な機能の呼び出しが非公開だったり することが多くて失敗しやすいね
842 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 05:24:58 ] >>840 印刷設定のコピー方法はプリンターの機種ごとに違ってて、そう簡単にはコピーできなかったと思う
843 名前:デフォルトの名無しさん [2010/03/26(金) 09:41:04 ] ←→ ┌─────┐┌─────┐ └─────┘└─────┘ 上のような感じで複数のセルの中から値の入力されてるセルの上端に双方向矢印を入力させるというマクロを作りたいのですが 可能でしょうか?双方向矢印を引くだけならマクロの記録を使ってできるのですが値のあるセルだけにという条件をくわえるにはどうしたらいいでしょうか? どなたか教えてください。
844 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:18:35 ] >>843 こんな漢字? Sub a() Set d = UsedRange For Each s In d If s.Value <> "" Then s.Offset(-1, 0).Value = "←→" End If Next End Sub
845 名前:デフォルトの名無しさん [2010/03/26(金) 13:58:50 ] >>844 うまく説明できてなくてすみません。。 例えばA1からD9までの範囲があったとしてそこの中のセルに値があるものだけを検索して 図形の双方向矢印をセルの上端の線に合わせて入れたいんですが可能でしょうか?
846 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:26:23 ] >>839 グローバル関数でいけました。ありがとうございました
847 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 21:14:29 ] >>843 やりたいのはこんな感じ カナ?カナ? Dim Sh As Worksheet Dim r As Range Dim X1 As Integer Dim X2 As Integer Dim Y1 As Integer Dim Y2 As Integer Set Sh = ActiveSheet For Each r In Sh.Range("A1:D9") If r.Value <> "" Then With r X1 = .Left Y1 = .Top X2 = X1 + .Width Y2 = Y1 End With With Sh.Shapes.AddLine(X1, Y1, X2, Y2).Line .BeginArrowheadStyle = msoArrowheadTriangle .EndArrowheadStyle = msoArrowheadTriangle End With End If Next
848 名前:デフォルトの名無しさん [2010/03/26(金) 22:49:43 ] >>847 ありがとうございます!!まさにそのとおりです。 ちなみに矢印を上端の中心に持ってきて左右の長さを縮めたいのですが・・・ ←→ .←────→ ┌─────┐┌─────┐ └─────┘└─────┘ 今のままでは右のようになるので左の図のようにしたいと考えてまして そういった方法の指定も可能ですか?
849 名前:847 mailto:sage [2010/03/26(金) 23:18:03 ] >>848 可能 Rangeオブジェクトのプロパティ Left Top Width Height 後はヘルプを見るなりして がんばってみてね
850 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 23:27:15 ] 色んなことをやりたい人がいるんだな
851 名前:デフォルトの名無しさん [2010/03/26(金) 23:35:17 ] このスレはVBAとPerl14 のスレなのになぜPerlネタが一切でてこないんだ?
852 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 23:49:26 ] 次の質問どうぞ
853 名前:847 mailto:sage [2010/03/27(土) 19:33:47 ] >>843 もう見てないかもしれないけれど >>847 のコードは 型宣言を 勘違いしてたみたい 変数 X1 X2 Y1 Y2 は Single型もしくはLong型で宣言するべきだった Integer型だと少数点以下がカットされるので線が少しずれてる さっきヘルプを見ていて気づいた ゴメンね
854 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 03:21:33 ] シェイプ関連の位置指定は、ポイント単位だからなあ。 て、Longも駄目だろw
855 名前:847 mailto:sage [2010/03/28(日) 10:55:03 ] >>854 がーーーん またまたすみません たっ たしかにそうでした 回答者に向いてないかも俺 さすがに落ち込みました
856 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:02:37 ] ドンマイ。よくあることだw
857 名前:デフォルトの名無しさん [2010/03/28(日) 21:05:10 ] 質問です。 CSVファイルをエクセルブック内のワークシートに貼り付けするとき、 Workbooks.Open Filename:=csvfile Workbooks(csvfile).Worksheets.Copy after:=Workbooks(mybook).Worksheets("ファイル一覧") Workbooks(csvfile).Close こんな感じで簡単に貼り付けています。 csvファイルが5MBとかサイズが大きくても上のようなやり方で問題ないでしょうか。 csvファイルの先頭から1レコードずつ取得して貼り付けるという方法もネットから探し出せたんですが どっちがいいのか判断しにくいです。
858 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 21:07:57 ] ExcelVBA開発がメインの人っているの? 趣味とか、基本的にはVBとか、やけにできる事務員とか、そんな感じですか?
859 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 21:21:12 ] 自称やけにできる事務員ですw
860 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 21:35:38 ] 英単語が並べられている列があり、隣の列に意味を書き出す、というのを作っています。 使用する英語の辞書のURLはwww.alc.co.jp/ です。 「apple」という単語を検索するとURLは eow.alc.co.jp/apple/UTF-8/?ref=sa となります。 ここで、英単語を検索した結果表示されたページから該当箇所を抜き出すというやり方が分かりません。 上記の「apple」の場合、「・apple」から「分節ap・ple」まで抜き出したいのです。 やり方がわかる方教えてください。
861 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:09:20 ] >>860 * データの転載は禁じられています。 class="midashi"
862 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:25:22 ] >>857 5MBのCSVなんて動作遅くならないか? 速さをなんとかしたいならsqlでやる。
863 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:28:17 ] >>860 VBA上から Webページのデータを取得するのは そのWebページのソースを見て理解できないと無理 (そしてそれをどうVBA上からコントロールするかも) ソースをみたけど <DIV class=mr_10 id=resultList ondblclick=seow()> ってのがあるから id=resultList ←これを利用すれば 「・apple」から「《コ》アップル・メニュー」 までは抜き出せるね あとはタグを辿っていくしかないかな
864 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 13:57:45 ] >>858 やけにできる事務員だった データの正規化やコピーする際に絶対にミスしないのが魅力的 速度自体は大して変わらん
865 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:59:35 ] 1ブック内に複数あるシート全てを選択した状態で、且つ一シート目にのみ開始ページ番号が振られている状態で 印刷したときに割り振られるページ数を、印刷せずにマクロで調べたいのですがどのような方法があるでしょうか? このシートのこのセルは何ページ目に該当する、ということを調べて行きたいです。 プレビューで見ていけば可能ですがページ数が膨大なのでマクロで処理したいと思っています。
866 名前:865 mailto:sage [2010/03/30(火) 11:02:54 ] すいません、バージョンは2000です。
867 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 13:47:33 ] >>865 『このシートのこのセル』はそもそもどうやって特定するの? 1シートで印刷するのは複数頁あるってこと?
868 名前:865 mailto:sage [2010/03/30(火) 16:43:41 ] >『このシートのこのセル』はそもそもどうやって特定するの? 全シート走査で特定単語を置換していくので、 その置換処理が行われたときのセルを元に出力時のページをその都度 調べてワークファイルに書き出したいと思っています。 (置換処理、書き出す処理はできてます) >1シートで印刷するのは複数頁あるってこと? そうです。 1シートに1頁の場合と複数頁ある場合とがあります。
869 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 20:18:53 ] 特定単語を置換する前に 検索→セル番地取得→セル番地から頁数割り出し という作業をかませばいいんでないの?
870 名前:865 mailto:sage [2010/03/30(火) 21:13:16 ] >>869 「セル番地から頁数割り出し」の部分がわからないんです…
871 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 21:41:45 ] 一度、印刷プレビューで1頁で何セル印字するのか調べてみたら
872 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 22:13:52 ] 使った事ないけど VPageBreak オブジェクト HPageBreak オブジェクト なんかどう?
873 名前:872 mailto:sage [2010/03/30(火) 23:30:03 ] ちょっとテストしてみたけど 頁数割り出しの参考にならないかな Sub test() Debug.Print "改ページ数:"; ActiveSheet.HPageBreaks.Count For Each a In ActiveSheet.HPageBreaks Debug.Print "改ページ 行位置:"; a.Location.Row Next End Sub
874 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 07:24:45 ] Application.OnTimeでサブルーチンを時間起動したいのですが、 セルをダブルクリックして値入力状態であったり、モーダルで バルーンを表示させていたりすると、Application.OnTimeに制御 が移らず、サブルーチンを起動できません。 これを回避する知恵をお持ちの方、ご教示願います。
875 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 16:52:52 ] 回避するって >セルをダブルクリックして値入力状態であったり、モーダルで >バルーンを表示させていたりすると、 はどうするねん 別にexcel.applicationを起こしてそっちでontimeさせればええやん
876 名前:デフォルトの名無しさん [2010/04/04(日) 19:32:11 ] XPsp2,EXCEL2003です。 ピボットテーブルをVBAで作成しているのですが、 データによって(件数?)、集計の仕方が、 「個数/金額」になったり、「合計/金額」になったりします。 常に「合計/金額」になるようにするには、どうすれば良いのでしょうか? コードは次の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "ZZZWORK!R5C" & c_yymm_p & ":R" & lastrow & "C" & c_io_p).CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル4", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル4").ColumnGrand = False ActiveSheet.PivotTables("ピボットテーブル4").AddFields RowFields:=Array("分類", "科目") _ , ColumnFields:="年月" ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _ xlDataField Application.CommandBars("PivotTable").Visible = False ActiveWorkbook.ShowPivotTableFieldList = False よろしくお願いします。
877 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 02:29:05 ] >>876 ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Function = xlSum
878 名前:876 [2010/04/05(月) 08:04:46 ] >>877 レスありがとうございます。 そのコードを追加したら、 実行時エラー'1004': PivotFieldクラスのFunctionプロパティを設定できません。 になりました。どうすれば良いのでしょうか? 追加した位置は、下記のステートメントの次です。 ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _ xlDataField よろしくお願いします。
879 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 12:28:18 ] >>878 フィールド名の「金額」の部分を自分の作ったテーブルに合わせて書き換える テーブルの一番左上の灰色のセルの値を見る
880 名前:878=876 [2010/04/05(月) 17:07:07 ] >>879 レスありがとうございます。 常に合計になるようにできましたm(_ _)m
881 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 18:37:42 ] サブメニューを複数個作りましたが、 どのサブメニューを選択しても、同じSubプロシージャを呼び出したいです。 Subプロシージャ側で、どのサブメニューが選択されたかを知るにはどうすればいいでしょうか? パラメーターとか使えますか? 参考になるサイトがありましたら紹介していただけませんか。