[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 12/08 08:49 / Filesize : 136 KB / Number-of Response : 496
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part11



1 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:05:30 ]
Excelの「VBA」に関する質問スレです

前スレ pc12.2ch.net/test/read.cgi/tech/1235332603/

★1 質問をするときはOSとExcelのバージョンを必ず書きましょう

★2 わからなければとりあえず「マクロの記録」をしてみましょう

★3 丸投げのプログラム作成依頼は受け付けていません

★4 VBAを使わない、Excelの使い方に関する質問はスレ違いです
    Excel総合相談所 82
    pc11.2ch.net/test/read.cgi/bsoft/1241825062/

199 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:44:39 ]
ファイルの検索やフォルダの検索ってできますか?

あるルートフォルダから、以下何階層に渡ってフォルダが作られているかは不明で、
指定した文字を含むファイルをルート以下から探して、返したいんだが。。。
全てを探して、名前を含むリストを作りたいんだよね。

200 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:49:33 ]
とりあえず、FileSearchオブジェクトは使用禁止と言っておく。
Office2007で廃止する気満々だったので。

201 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:55:02 ]
とうとう俺がVBAに本気出すことにした。
今はまだひよっこだが、いずれ大鷲となって羽ばたいた時
おまえら大鷲先生と呼べよ。

202 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:00:54 ]
飛んでから言えよw

203 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:01:46 ]
何か知らんががんばれよ
俺は配列で飽きてC言語やってるわ

204 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:03:22 ]
>>199
そのマクロどっかで配布されてた。


205 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:11:21 ]
Excel VBA FileSearchでぐぐると
Dir関数とかの話がでてくるよ

206 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:47:16 ]
FileSearchってのは使わない方がいいのは何故なんでしょう?

207 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:06:07 ]
ttp://www.google.co.jp/search?q=excel+2007+filesearch




208 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:12:10 ]
質問です。

Functionプロシージャに渡したい引数が多い場合、構造体を作って
Public Type UserType
  a As integer
  b As Long
  c(10) As String
End Type

Sub AAA()
  Dim data As UserType
  Call BBB(data)
End Sub

Function aaa(ByRef data As UserType)
 '処理
End Function

のように構造体ごと渡してやればスッキリしますよね。
この時dataの中身を値渡しのように使いたいとしても、参照渡しとなるので
Functionプロシ−ジャの中でdataの中身が書き換えられる恐れはありますよね?
構造体を渡すけれども、値渡しとして使うという明示的な方法はあるのでしょうか?

宜しくお願いします。

209 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 07:41:08 ]
>>208
基本的には無い。やるとしたら以下の3つかな?
@コーディングルール徹底(コメントを残して従う、関数名 etc)
A予め構造体をコピーしておく
B構造体ではなく、必要データだけ渡す

もしかして、byval渡しなら出来たりして。
けど、VBAに限らず上の3つは基本だと思う。

210 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 20:37:10 ]
W2K XL2000 配列から重複データを排除しユニークなデータの集合にする方法を教えてちょんまげ

211 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 20:52:04 ]
>>210
スレ違い>>4★5★6

212 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 22:04:46 ]
>>210
dictionary使う。

213 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 22:09:44 ]
ユニークといえばモニーク

214 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 03:34:49 ]
>>210
ワークシートに並べてフィルタかける

215 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 09:01:13 ]
>>214
オートフィルタとかワークシート関数とかを如何に活用するかが
ExcelVBAの醍醐味

216 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 18:33:58 ]
>>215
そうだね。
となりに=COUNTIF($A$1:A1,A1)が1になってるとことか、=MATCH(A1,A:A,0)=ROW()がTRUEになってるとこをオートフィルターにかけりゃいいもんな。

217 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:25:09 ]
配列まで使えるってことはVBAをそれなりに使えると考えられるわけで
既に存在する配列からの削除って事は
フィルタかけるくらいなら取り込み時点で排除する方法を採っているだろうと予想できるわけで
CreateObject(Scripting.Dictionary)はこれ自体の機能はスマートだけど
結局配列に戻さないといけないから実用レベルで組み込むとコードが鬱陶しいんだよね。
なんか実務家ならではの回答ってないの?おまえら



218 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:32:50 ]
dictionaryに放り込んでから配列に戻すのが面倒だと感じるならば、
重複判定を積んだ配列に放り込めば良いじゃない。

配列を複数持つ事を嫌うならば、クイックソートで配列を並び替えて、
重複した場合に削除すりゃ良い。
これはワークシートでやってる事と一緒だけどね。

個人的には、作業用配列を作る事に違和感を感じないんで、
別配列に重複判定しながら放り込むけどな。

219 名前:217(210) [2009/05/28(木) 19:48:25 ]
いいですね。教えてちょんまげ。
まず「配列に重複判定を積む」ってどうやるんですか?
それから、配列から配列を作ろうとする場合、まず二重ループでの処理を思いつくけど
配列を二重ループ内に組み込むとエラーが出ちゃいますよね。
これ、どうやって回避、あるいはどんな他の方法を採ってますか?

220 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:02:41 ]
1次元配列で良ければDictionaryのKeysメソッドで何も面倒なことないんでない?
別の2次元配列なら重複判定しながら放り込んだ方がいいけどな。

221 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:25:20 ]
Scripting.Dictionaryがハッシュ使ってて性能いいんじゃね?

222 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:53:30 ]
>>221
データによるね。
あまりにも多いとCollectionに負けるし、クイックソートして詰める手法にも負ける。

223 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:09:02 ]
Dictionaryで重複を弾くのは裏道を抜ける感じがするんで、
論理的思考を養う段階のレベルならば、Dictionaryを避けて配列使った方が良いかもなぁ。

でも、pushがデフォルトで搭載されてない言語だから、ステップ数増えるよね。
Dictionaryでもいいかな・・・とも思う。難しいのぉ。

これを機会にクイックソート覚えるのもいいかもね。

224 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:19:37 ]
CreateObject("System.Collections.SortedList")は?

225 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:22:06 ]
文字列データはいいとして、ある決まった範囲の整数にまでDictionaryを使うやつはアホだね。
猫も杓子もCreateObject(Scripting.Dictionaryを見るとうんざり。

226 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:26:35 ]
> なんか実務家ならではの回答ってないの?おまえら
スレ違いだからコードそのものは伏せるけど、重複削除の汎用関数作って、
それに放り込むだけだろ

ワークシートの機能とかScripting.Dictionaryとか使えない言語でも
この手の処理は必要になるから、ちゃんといくつかのアルゴリズムが確立されている

ソートみたいに、計算量、必要バッファ量、順序の維持(ソートで言うところの安定ソート)など
それぞれ特徴があるから、必要なアルゴリズムを必要な言語に書き換えて用意して
おけば良いだけの話

227 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:31:06 ]
>>226
それがどれなのか分からないから教えてくださいって話じゃね
教えてくださいよ先輩



228 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:32:39 ]
しかしExcel2007の新機能の重複の削除はひどいな。
どっかで見て俺も試したら笑ってしまった。
重複してないものまで削除することあるんだもんな。

229 名前:217(210) [2009/05/28(木) 21:33:53 ]
いろいろありがとう。
>重複削除の汎用関数作って
理想としてはこれでやりたいんだけど、
Functionとの間での配列の引渡し方・受け入れ方が分からないんですよ…

230 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 22:11:21 ]
>>229
もう総当たりでやれよ。関数化は後の話だ。
関数化するにも、自前でルーチン作成出来なきゃダメなんだしさ。

forで 配列1 から 配列2 に全要素をコピーするだけだ。
その時に、配列2に対象の要素が含まれていない時って条件付けるだけ。
総当たりでやるのが論理的には一番理解しやすい。

先ずはここから入って、処理速度や負荷の問題が見えてきたら、
その状況に応じて別のルーチンを考えれば良いと思うよ。

231 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 09:41:11 ]
そういえば、2007で.netってサポートされてるの?
使える雰囲気が全然無いんだが、2010では.netのサポートがあるかな?
次期Officeにはほかの言語もサポートしてもらえるとうれしいな。

232 名前:デフォルトの名無しさん [2009/05/29(金) 10:02:32 ]
質問です。

コマンドボタンを押すとへこんだままになってしまいます。
処理は正しく実行されて、もう一度押すとまた処理が実行された後に元に戻ります。
使う上で問題は無いのですが、直したいです。
設定が悪いのでしょうか?

233 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:08:25 ]
それ、コマンドボタンじゃなくてチェックボックスだろ

234 名前:デフォルトの名無しさん [2009/05/29(金) 10:15:42 ]
いえ、コマンドボタンです。
確認したら処理は最後まで実行されていたんですが、
見た目だけだと処理がフリーズして止まっている様な感じになります。


235 名前:デフォルトの名無しさん [2009/05/29(金) 10:27:16 ]
解決しました。
今あるボタンを消して新しく作ってみたら直りました。

236 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:38:56 ]
作り直して解決って事はやっぱりチェックボックスだったんだろうな
グラフィックは全く同じだし、押し下げでも上げ戻しでもClickイベント発生するし

237 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 14:18:22 ]
>>231
VSTO使えば.netFrameworkの恩恵をフルに享受することができる。
あまり流行ってないけどね。



238 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 17:50:30 ]
Excel2003のVBAで新規のbookを作ってファイル名を
YYYYMMDDhhmmssにしたいのですが、

Wbook_out = Year(Date) & _
Right("0" & Month(Date), 2) & _
Right("0" & Day(Date), 2) & _
Right("0" & Hour(Now), 2) & _
Right("0" & Minute(Now), 2) & _
Right("0" & Second(Now), 2)

もっと適当な命令や定番テクニックってないですか?

239 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:30:47 ]
>>238
=Format(Now,"YYYYMMDDHHMMSS")

240 名前:238 mailto:sage [2009/05/29(金) 18:39:35 ]
>239

ありがとうございました(ペコリ

241 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:43:43 ]
今、VBAの勉強してるんですが、自分は仕事しててこういう時にVBAが役立った
という経験があったら教えていただきたいのですが。。

242 名前:デフォルトの名無しさん mailto:sage マジでw [2009/05/29(金) 18:59:16 ]
VBAのおかげで彼女が出来ました!

243 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:22:10 ]
>>241
・古いファイルの正規化
・プリンタの変更→印刷→プリンタの変更、をボタン一つで出来るようになったこと
・他人に作ったシートには関数を入れず、ボタンを押して計算させるようにしたこと(何度言っても計算式の入ってるセルに上書きするアホウがいる為)
・ファイル名の一部をシート名にする、等
・彼女は出来・・ねーよwただ仕事上、仲良くなるきっかけにはなったかもしれない
他細かいことは色々あるけど、とにかくまぁ色々便利。特に中小企業でマクロ使えればかなり便利じゃないかな
逆に大企業だと使う場面が無いかと。VBA無しのアクセスの方がよっぽど使う機会が多かった

244 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:29:39 ]
テキストエディタのマクロや正規表現は結構使うけど
Excelのマクロとか、セキュリティ云々でうるさいからあまり使わないなぁ。

245 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:56:05 ]
>>241
VBAのおかげで持病が治りました

246 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:56:47 ]
Sub hoge()
    Dim hoge As Range
   
    If (hoge Is Nothing) Or (hoge.Value = 0) Then
        Exit Sub
    End If
End hoge
なぜかエラー出る@2007

247 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:00:25 ]
>>246
Sub hoge()
Dim hoge As Range
Set hoge = Range("a1")
If (hoge Is Nothing) Or (hoge.Value = 0) Then
Exit Sub
End If
End Sub

set



248 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:32:13 ]
>>247
hogeに値を代入してないのは、値を読み出そうとしたときにエラーを起こさせるためだよ。
VBAはデフォルトでショートサーキット評価ではないみたいだね。
msdn.microsoft.com/ja-jp/library/ea1sssb2(VS.80).aspx
ショートサーキットで評価をするにはOrElseをつかえということだけど
VBAではこれまた制限されてるみたいだね。
If hoge is Nothing then exit sub
if hoge.Value == 0 then exit sub
と分けて書くしかないかな?




249 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:48:53 ]
何をやりたいのか分らんが、こういうことじゃないよなぁ。
Select Case True
  Case hoge Is Nothing, hoge.Value = 0
    Exit Sub
End Select

250 名前:246 mailto:sage [2009/05/29(金) 23:31:58 ]
>>249
おお、それだ。
Select Case Trueとか、なんて変態的なんだw
Delphiのcase Integer of (Cのunionと同義)を思い出させるぜ。

なんかトリッキーすぎて分かりにくいなあ。VBAではこういう書き方って一般的なの?
それとも、Ifを連ねて書く方が一般的?

251 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:53:18 ]
オレはIf〜Elseを並べてる

252 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:39:40 ]
>>250
VBAではごく一般的だと思うけどな。

253 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:55:27 ]
言語によってスパスパ頭切り替えられない奴は
向いてないと思う。

254 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:55:38 ]
職場のEXCEL2000で使うためのマクロを作っています
マクロ自体は自宅の2003で組んでいます。OSはどちらもXPです。

D2とA5のセルにそれぞれ値が入っているときに、D5のセル位置を取得する方法ってありませんか?
Ctrl+Endで移動する位置を取得したいのです。
ActiveSheet.UsedRangeでいけるかなと思ったのですが、セルが飛び飛びで利用されている場合だと
うまく機能しないときがあるようです。


255 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 01:00:33 ]
>>254
www.niji.or.jp/home/toru/notes/8.html

256 名前:デフォルトの名無しさん [2009/05/30(土) 07:39:32 ]
>>241
SQL Server とのやり取りが多いから、使わないと仕事にならねぇ
検索結果をExcelにはくことが多いから
#数万行出す場合、他アプリから出力すると遅さに耐えられないw

テキスト取り込んで簡単な集計する場合とか、ボタン一発のほうが楽じゃね?
#簡単じゃない集計はDBに入れてから処理する

worksheet関数を鬼のように駆使する人は、ある意味すごいと思うけど
VBA使ったほうが、楽になるのに・・と思う場合が多い
後でメンテする場合、Cellを延々と追いかけるの、めんどくないかなと思うんだわ
#いや、自分はめんどくさがりや だから
#まぁ コード書くのが本職なんだけどねw

257 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 07:49:05 ]
数式が長くなると一覧できなくなるのと
コメントが書けないのがワークシート関数の欠点かな
関数一発でいきなり動いて結果が出る手軽さとどっちを取るかだね



258 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 08:56:42 ]
delete押すだけで消えてしまうのも怖い

259 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 09:19:01 ]
保護

260 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:29:03 ]
行がたくさんあってゴチャゴチャしてるシートの視認性を良くするために
選択したセルのある行に一時的に色をつける処理を考えてるんですが
Private SubWorksheet_SelectionChange(ByVal Target As Range)

261 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:34:59 ]
誤送信失礼。
行がたくさんあってゴチャゴチャしてるシートの視認性を良くするために
選択したセルのある行全体に一時的に色をつけようと考えてるんですが

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Rows(ActiveCell.Row).Interior.ColorIndex = 37
End Sub

でとりあえず色はつけられたものの
カーソルを移動した後もその行は色がついたままになってしまうので
どうにか消せないものかと考えてるんですが、何か方法はありませんでしょうか?

262 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:52:08 ]
消す処理入れてないんだから消えないのは当然でしょ?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Cells.Interior.ColorIndex = xlNone
   Rows(ActiveCell.Row).Interior.ColorIndex = 37
End Sub

但し、行強調以外の色つけも全部消えるからね
それじゃ困るというならあとは自分で工夫しな

263 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:57:04 ]
VBA以前にレイアウトを考えたほうが良いんじゃね?

264 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:59:14 ]
あー、なるほど
色をつける前に全消ししてしまえばいいんですね
色をつけたあとに前に選択していた行だけを消そうと考えていたせいで思いつきませんでした
ありがとうございます

265 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:54:29 ]
ワークシートの右端の列にフラグを入れるとか

266 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:01:11 ]
>265

ダッセw

267 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 08:07:29 ]
>>261
実際にやってみると分かるけど、すげー重いぞそれ。
とても実用化出来ないほど重い。



268 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 08:49:31 ]
余程化石なPC使ってるか、余程システムかExcelが腐ってる状態で使ってるんですね

269 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 15:09:59 ]
昔は>>261>>262みたいなのは重くて使えなかったのは確かだが、今のパソコンはそれほどでもないんじゃない?
Excel97が出たころは一工夫して下みたいな十字カーソルをやってた。
もっともExcel97はTargetじゃなくSelectionだったかも。

Dim rng As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not rng Is Nothing Then
  rng.Interior.ColorIndex = xlColorIndexNone
End If
With Target
  Set rng = Union(.EntireRow, .EntireColumn)
End With
rng.Interior.ColorIndex = 8
End Sub

今のExcelは行列番号の色がはっきり違って目立つから全然必要ないと思うんだが。

270 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:34:43 ]
実はたいして変わらないんだけどね

271 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:26:20 ]
他ファイルを処理するプログラムの初期処理で、
選択範囲を保管しておきたいです。

選択範囲がセルなら、Selection.Address
選択範囲が図形なら、Selection.Name

を保管しておけばいいのだろうけれど、
値にアクセスする前に型を判別できないのでエラーになってしまう。
どうしたらよかんべ?

272 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:34:20 ]
>>271
なんでわざわざAddressやNameを保持するの?
Selectionそのものを保持すればいいだけじゃん

Dim hoge As Object

Sub 選択保持()
  Set hoge = Selection
End Sub

Sub 選択復元()
  hoge.Select
End Sub

273 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:09:00 ]
>>272
サンクス。

Rangeオブジェクトのときは上手くいくのだけど、
画像などの場合、他の箇所で切った貼ったを行ってしまうと、
PictureクラスのSelectメソッドが失敗してしまう。

なので、質問したようなやり方をしたいのだ。

274 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:27:31 ]
>>270
今はたいして変わらんかも知らんが、昔の低スペック機では全然違ったのよ。
いったん全部色を消すのは使い物にならなかった記憶がある。

275 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:57:25 ]
>>269のコードと、普通に書いた下のコードを比較してみれば分るな。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlColorIndexNone
With Target
Union(.EntireRow, .EntireColumn).Interior.ColorIndex = 8
End With
End Sub

2007でA1:J100を順番にSelectさせてみたら、こっちは約10秒で>>269は約2秒だった。
5倍くらい違うということか。
今の高スペック機じゃ一回では体感できないが昔ははっきり体感できたもんな。

276 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:25:29 ]
>>273
セルと図形って言ってただろ?
なんで画像が出てくるんだ?

277 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:28:48 ]
>>275
現行機で0.93秒と、1.75秒だった
10年以上前のPen3 450MHzでも1回当たりの体感に差はない



278 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:54:28 ]
>>277
バージョンによってCellsとかの扱いが違うのかもよ。
とにかくExcel97で275みたいなのは使い物にならなかったのははっきり覚えているよ。
あまり絡むなよ。

279 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:24:30 ]
覚えていること(人の記憶)と、リアルタイムで実践したことでは
当然ながら後者に信憑性があることは言うまでもないわけで。
あまり絡むなよ。

280 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:27:47 ]
本当に嫌な性格だねぇ。
Pentium3の発売が何年か知ってるのかよ。
97年当時Pentium3 450MHzなんてないんだよ。

281 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:33:18 ]
粘着君が97年当時のパソコンをヤフオクで買い求めたりしてw

282 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:38:15 ]
Office97が出た頃にはWindows98の話題が出ていた
多くの人はWin95にOffice97パッケージを乗せずに、
Win98もしくはWin98SEとOffice97が入ったマシンに買い換えた
1999年、Pentium IIIが現れWin98の情報も溢れてきた頃に

283 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:55:11 ]
というか、277は10年以上前のPen3 450MHzって書いてるだけで、10年前にPentium3が無かったってなら
突っ込むのも解るが、10年前にはPentium3の550MHzが出てたし、280は何で絡んでるのかよくわからんな。

284 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:03:41 ]
>>283
話の流れを良く読め。

285 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:09:39 ]
277=279だったら277が粘着してるが、別人だったら>>283の言う通りだね。

286 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:13:12 ]
というか、件のコードが当時は使い物にならなかったってことにしようと
約一名が躍起になってるだけのように見えて痛々しい

287 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:18:41 ]
と約1名が躍起になってるようですね。
ほんと痛々しいね。



288 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:20:39 ]
>>280
化石引っ張り出してきたよ
12年前のPen2 233MHzでも1回当たりの体感に差はない

カーソルキーで連続移動すれば体感差あるけど
カーソルキー移動1回、もしくはマウスクリック1回に置いて
色の切り替わり速度に違いは感じられない

289 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:24:34 ]
結局認めてるじゃん

290 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:28:35 ]
まぁ1回ではって書いたの俺だから、俺が悪かったよ。
気が済んだか?


291 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:30:43 ]
> 今の高スペック機じゃ一回では体感できないが昔ははっきり体感できたもんな。

292 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:32:54 ]
>>289
話の流れを良く読め。

293 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:33:55 ]
だから1回ではってのは間違いだよ。すまんね。
使い物にならないのは>>268も書いてる通りだ。


294 名前:293 mailto:sage [2009/05/31(日) 23:34:53 ]
>>268じゃなくて>>288な。

295 名前:288 mailto:sage [2009/05/31(日) 23:36:45 ]
残念、使い物になってるけど

296 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:37:00 ]
どっちもファイト!

297 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:37:27 ]
>>276
Excelのオブジェクトでは、図形に画像は包含されるから。
Shape > Picture
紛らわしい書き方だったか。



298 名前:通りすがり mailto:sage [2009/05/31(日) 23:38:33 ]
いやそもそも
>>288
は真実か?
先ずはそこから検証だ

299 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:40:22 ]
通りすがり
わざわざ書くのは
自作自演

字余り

300 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:43:56 ]
>>299
お前かわいそうなやつだなぁ。
まぁ自作自演じゃないのが分るのは2名だけだけどな。

301 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:46:07 ]
図星か

302 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:49:06 ]
本当の通りすがりは、わざわざ通りすがりであることを
強調する必要もないからな。
当人ではなく第三者的な意見だって事に
しておきたい場合の策だったんだろうがバレバレすぎるw

303 名前:通りすがり mailto:sage [2009/05/31(日) 23:49:12 ]
違うんだけどな
このIDの無い板で自作自演をするのに
わざわざハンドル名付ける必要も
そもそも自作自演する必要も無いんだけどな

304 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:52:03 ]
本当に通りすがりなら、勘違いしてる奴なんて放っておけば良いのに
必死に弁明するから実は通りすがりじゃないことが立証されていく
まさに泥沼

305 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:53:31 ]
>>3.02は普段さんざん自作自演やりまくってるんだよ。
自分がやってるから他人もそうだと思っちゃうかわいそうな人なんだな。

306 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:54:06 ]
>>304
おめー病院逝けよ。

307 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:55:05 ]
> >>3.02
そんなに焦らず、そんなに怯えずに



308 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:03:01 ]
自己を誤魔化しきれなくなると相手の罵倒に走る、正に王道パターンw

309 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:12:16 ]
おまいら会って喧嘩しろよ。
勝った方が正義だw
ファイト!

310 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:16:48 ]
というかその前に静かになっちゃったね
自演で1回線2,3役やってたから連投規制でも喰らったかな

311 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:26:53 ]
かわいそうな人。

312 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:43:01 ]
ほんと、かわいそう

313 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:48:00 ]
>>269>>275を比較してみた。
A1〜J100をループを回してセレクトしてみた。

まずどちらもまっさらなシートで計ったら
>>269 2.2秒
>>279 11秒

次に両方のシートのA1:J5000に"a"と入力してから計ったら
>>269 10.59秒
>>279 23.44秒

>>288はどういう計り方したの?


314 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 02:06:30 ]
すまん、>>269>>275ね。
ちなみにA1:S10000に入力したら12秒と40秒だった・

315 名前:>>261 mailto:sage [2009/06/01(月) 07:23:35 ]
>>267
会社のパソコンでやってみたらなんか処理重いなと思って来てみたら
俺のへっぽこコードのせいで変な議論になっちゃったみたいですね・・・

消すほうも塗るほうも範囲を指定すれば軽くなるのかな?

316 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 07:34:06 ]
良く分からんけど、changeの度に200ms以上のラグが発生したらNGだな。


317 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 07:59:23 ]
性能が高すぎるんじゃね?
比較するなら短い方が最低でも2,3秒になるように範囲を調整した方がいいかも。
値が小さくなるほど誤差の影響は大きくなるから。

あとは2007ではなく2003だと、差が少ないのかも知れない。
うちはメインもサブもXPに2003だけど、A1:J100で5回の平均取ったら

メイン 1.6秒:3.9秒 2.43倍
サブ  2.3秒:7.1秒 3.08倍

A1:J200だと

メイン 2.9秒:8.6秒 2.96倍
サブ  4.6秒:14.1秒 3.06倍

って結果になったよ。約3倍ってところで、2003なら5倍までの差は無いみたい。



318 名前:デフォルトの名無しさん [2009/06/01(月) 08:16:53 ]
>>315
気にするな、基地外が一人紛れ込んできただけらしいから。
Excel2000で>269と>>275比べて見たが、はっきり体感差があるよ。
>>277>>288はシートの上の方の行でしか比べてないんだろう。
>>313のように入力して最終行近くで比べれば1回でもはっきり分かる。
A1〜J100をSelectさせてみたら>>269が8秒で>>275が66秒だった。
Pentim D 2.8GHzの結構古いパソコンだけど、もっと昔のExce97当時の
パソコンなら多分>>275は後ろの行ではとろくて使えないと思う。

319 名前:デフォルトの名無しさん [2009/06/01(月) 08:23:23 ]
>>316
だよな。おれも0.2秒ならストレス感じるよ。
しかし最近はSUMPRODUCTなどで鍛えてる人多いから、そういう人たちは我慢強いかもね。

320 名前:318 mailto:sage [2009/06/01(月) 08:41:57 ]
ごめん、>>313のように入力範囲が広ければ別に最終行近くじゃなくてA1近くでもはっきり体感差があるね。

321 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 09:34:35 ]
>>320
1回65536行目近くに移動してから1行目近くににもどった場合>>275は重くなるんじゃじゃね?
1行目近くで軽くするにはオブジェクト変数にMe.UsedRangeをセットすればいいみたいよ。
65536行近くだとやっぱ重いけどな。

322 名前:318 mailto:sage [2009/06/01(月) 09:49:56 ]
>>321
トンクス
試してみたら確かにそうだった。
最初はたしかA1近くでは重くなかったはずなのに途中で重くなったのでおかしいと思ったよ。
なるほどUsedRangeね。

323 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 11:25:22 ]
>>317
結構速いね。
俺はCore 2 Duo3.33GHzだがそちらのサブ機より約3倍近く遅い。
Vistaがクソなのか?
ところで>>313が書いてるように広範囲に入力したの?

324 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:45:14 ]
しかし>>269をさんざん罵倒してたやつある意味すごいよな。
他人の言うことは端から聞く耳持たないらしいけど、変な自信はたっぷりあるんだろうね。
負けることは絶対に許されない人かも知らんね。
前からここや総合相談所に統合失調症の疑いがあるやついるんだが彼かもね。

325 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:19:26 ]
>>323
広範囲に入力しなくても最終行に飛んで1行に戻ってくるだけで重いみたいね。

326 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:02:31 ]
>>325
だったね。

327 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:48:51 ]
速度厨 uza



328 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:44:02 ]
間違いをuzaで済ませられる性格がうらやましいね。
おれなんか落ち込んで死にたくなるよ。
そこをこらえて謝るけどな。

329 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:46:02 ]
一連の気違い発言が327じゃなかったらすまんね。

330 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:07:30 ]
>>324
>>269を罵倒してる奴なんて一人も居ないよ。

>>269の方が優れていることは認めた上で、>>262でも
使い物にならないほど遅くはないって話をしてるだけ。

会社でいつも怒られまくってて被害妄想気味なのかもしれないけど
誰も>>269を責めても攻めてもいないから、よく話を読もうね。

331 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:17:39 ]
来たね。w
もう見苦しいからいい加減やめようや。
会社員ねぇw

332 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:46:01 ]
とりあえず落ち着こう。

333 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:48:06 ]
今頃>>262が使いものになるってアホでつか?
使い物にならない事例がさんざん書かれてるのに見てないのかな。
ほんと見苦しいいいわけにしか見えないや。

334 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:58:00 ]
>>333
まぁまぁ。
辛抱強い人には200m秒はおいて数秒のレスポンスでも遅いと感じないかも知れないんだから。
人それぞれだよ。

335 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:07:01 ]
>>334
なるほどね。
スローライフの人か。

336 名前:デフォルトの名無しさん [2009/06/01(月) 22:23:20 ]
For i = 0 to 20000
   Cell.Interior.ColorIndex = Int(Rnd()*20)
Next i
したらマジで気分悪くなってきた

337 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:44:50 ]
>>336
最新のExcelはCellsじゃなくてもいいのか



338 名前:241 mailto:sage [2009/06/02(火) 00:36:45 ]
>>243
>>256

今更だけど、どうもありがとう。
勉強初めて一ヶ月経ったけど、ただテキストを最初から読んでいくだけだと、
あまり身につかないものですね。

VBAを使って何をどうしたいという動機が必要なのかな?

339 名前:デフォルトの名無しさん [2009/06/02(火) 02:09:20 ]
>>337
タイポだ。まあ気にしないでくれ。

340 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:02:32 ]
時代の変化を受け入れられないんだね

341 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:40:02 ]
PowerPointのVBAなんだけど、他所にないようなのでここで質問させてほしい。

PowerPointでファイルを開いてVBAを使った処理をするんだけど、
PowerPointにはExcelのGetOpenFilename()に相当するものが存在しないので、
コマンドバーを使ってファイルを開くダイアログを出してみた。
 Application.CommandBars.FindControl(ID:=23).Execute
これを実行してみると、ダイアログを呼び出してすぐに次の命令に進んでしまう。
つまり、新しくファイルを開く前に先に進んでエラーになってしまう。
今はブレークポイントを設定しておき、ファイルを開いてから再実行するということをしている。

タイマーを使うとか考えてみたけど、どうも現実的ではない。
何とかうまくやる方法はないだろうか。

342 名前:通りすがり mailto:sage [2009/06/02(火) 09:55:39 ]
>>341
>>92は駄目?

343 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:57:30 ]
ごめん
これ
閉じてから再実行でした

344 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:27:25 ]
>>338
作りたいものを作って、少しずつ改良していくのがいいと思う

345 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:04:19 ]
>>338
やりたいことがわからないで勉強しても無意味だよ
学校に通ってても英語の勉強が今では何の役にも立たないのと一緒

毎回これやるのめんどくせぇな、、、、なんとかならんかな、、、
からvba勉強し始めると
ここの人の手助けもあって2週間位で株の自動発注から返済までが組めるようになった

346 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:09:08 ]
株ねぇ
そういえば俺の尊敬する株屋さんどこ行っちゃったんだろうな。
某Q&Aサロンで女性になりすまして活躍してるという噂を聞いたが。

347 名前:デフォルトの名無しさん [2009/06/02(火) 18:21:01 ]
さっき図書館でSE関係の新刊があったのでパラパラとめくりながら読んでたら、
”VBAにいくら習熟しても金にならないから、優秀な人はどんどん他の言語に移っていく。
VBAは下っ端の奴がやらされる仕事だ。”
みたいな意味の事が書いてあった。

薄々、同じような事を思ってたけど、いざ活字で目にするとショックだ。




348 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 18:52:54 ]
質問です。

少し時間のかかる処理をさせているんですが、
その処理が動いてる間、
ボタンなしのダイアログ等で『処理中』と表示させ、
処理が済んだら自動で消す、
といったような事はできますか?

349 名前: ◆.jruuB3RTA [2009/06/02(火) 19:06:59 ]
Cells(Rows.Count,1).End(xlUp).Select

Endプロパティは連続したデータ範囲の終端セルを返すので、
表の途中に空白セルがあるとデータを返せない。
と、テキストには書いてあるのですが、
空白セルがあったら、Null値とか文字列とかを入れるプログラムは書けませんか?

350 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:20:53 ]
>>347
んっとだな。
VBA単体では金にならない。ってのが正しいと思うよ。

事務処理業務+VBA とか、何かの基礎に付随する能力としてのVBAは金になる。

VBAだけしこしこ組んで金にはならん。
DB+VBAとかでも生活出来る程度の金になるし、
転職する時には凄く大きなアドバンテージになる。

351 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:24:14 ]
>>348
ユーザーフォームで。
もしくは別シートを表示させるとかね。

>>349
何のデータを返したい?
表の途中に空白があったら、そこに文字列を入れたいのかな?
それならば、forで上から判定させながら入れて行くのが良いんじゃないかな。

for i = 1 to cells(rows.count,1).end(xlup).row
if cells(i,1).value = "" then
cells(i,1).value = "空欄"
end if
next

みたいに。

352 名前: ◆.jruuB3RTA [2009/06/02(火) 19:30:15 ]
>>351
どうもありがとう。
こんな短時間で答えられるなんてすごいなぁ。
図々しくて申し訳ないんだけど、

rows.count,1

の1って、どういう意味ですか?
すいませんが宜しくお願いします。


353 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:42:16 ]
Cells(Rows.Count, 1)..SelectとかCells(Rows.Count, 2)..Selectなどやってみれば分りますよ。

354 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:09:13 ]
>>351
ユーザーフォームとは、、
まだ始めたばかりで余り単語とかも分からず…

355 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:01:54 ]
>>348
VBAでプログレスバーっていうのはどこかにあるよ

356 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:47:46 ]
プログレスバーってのはvbaだけですよね?
excelで使いたいんです。。。
通常のVBは入ってないので。

357 名前:デフォルトの名無しさん [2009/06/02(火) 21:54:20 ]
>>347
あくまで道具の一種ですよ。
ほかの言語でやる必要があればその言語を使えば良いだけ。
並列言語とかをのぞけば、要件抽出して、適当にクラスをモデリングするという基本的な作業は変わらん。

>>350
>DB+VBAとかでも生活出来る程度の金になるし、
それは他の分野で優れていて、なおかつそういうサブスキルがあればその分有利になるってだけの話だろ。
それだけで食っていけるなら、失業者なんて出ないよ。



358 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:56:38 ]
以前、FileSearchについて質問した者です。

更に質問なんですが、
FileSearchで見つかったファイル、ファイルパスをシートにリストにしているんですが、
その見つかった数だけ、隣にコマンドボタンを自動で作り、そのボタンで隣のパスのファイルを開く、
という動作はできますでしょうか?


359 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 22:08:23 ]
プログレスバーの例
www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html

>>358
ボタンじゃなくて、リンクではどうよ

360 名前:254 mailto:sage [2009/06/02(火) 23:32:35 ]
>>255
遅ればせながらありがとうございました。
リンク先S4でやりたかったことができました。

361 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:43:00 ]
>>359
リンクでやってみようと思います。

それから、FileSearch実行中にステータスバーに検索状況を表示しようと思っているんですが、
どのタイミングで記述すればいいか分かりません。
以下ソース一部です。

.SearchSubFolders = True ' サブフォルダも探索

If .Execute() <> 0 Then
For Each vntF In .FoundFiles
With objFSO.GetFile(vntF)
GYO = GYO + 1
Cells(GYO, 1).Value = .Name
Cells(GYO, 2).Value = .DateLastModified
Cells(GYO, 3).Value = _
Left(.Path, Len(.Path))
With Worksheets("Sheet1")
.Hyperlinks.Add anchor:=Cells(GYO, 3), _
Address:=Cells(GYO, 3).Value
End With
cntFound = cntFound + 1
End With
Next vntF
End If
End With


362 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:22:43 ]
>>349
>>空白セルがあったら、Null値とか文字列とかを入れるプログラム
Cells(Rows.Count, 1).SpecialCells(xlCellTypeBlanks) = "Nullとか文字列"
はだめ?

363 名前:341 mailto:sage [2009/06/03(水) 01:13:32 ]
だめかなー

364 名前:デフォルトの名無しさん mailto:age [2009/06/03(水) 07:07:54 ]
vbaって廃止されるの?
VSTOだけになっちゃうの?

365 名前:デフォルトの名無しさん [2009/06/03(水) 07:19:18 ]
VBAって何の為にあるのだろう?
昨日、VBAを使ってACCESSにつなぐのが1時間くらいできなくて、
さっきExcelのリボンからやってみたら1分でできた。
俺の頭が悪いだけなのかw

でも、VBAやったおかげで、他のスクリプト言語の理解度が深まった気がするから、
やはり、勉強してみて良かったのかな?

366 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 07:36:02 ]
>>365
お前ではどんな言語をやっても意味ないだろうな

367 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:15:48 ]
単一の機能を呼び出すだけなら、1時間もかかるのはバカだからだとしても
VBAのコード書きからやるよりは、メニューやリボン、ツールバーなどからの方が速くて当然

VBAは主に何度も行う定型処理や規則処理、連続処理などに使う
スクリプトも使うならそのくらいわかりそうな物だけど



368 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:16:13 ]
VBAって補助的なツールとして使うだけだな。
使えればそれなりに作業効率がアップする程度かな。

369 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:56:47 ]
最初は時間かかってもいいからとにかく動くものを作って理解する
作ったものはエクスポートして保管しておく
後はそれをコピペして改造しながら使っていく

VBAを飯の種にしてる人以外はこんなもんじゃね?

370 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 09:55:35 ]
純粋にVBAだけで食ってるのは、本書いたり教室で教えたりの人だけじゃね?

俺は全社の業務効率化の為にVBAだけで仕事してるけど、
それでも会社の事知らないと作れないから、それだけで食ってるとは言い難いな。

371 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:20:28 ]
VBAもピボットも機能の一つでしょ。それ以上でもそれ以下でもない
使いどころを間違えれば仕事が遅くなるのは当然

372 名前:341 mailto:sage [2009/06/03(水) 22:14:25 ]
>>366
はは。他の言語とか、そんなことないんだけどなー。
Office VBAはやらなかったもんでね。
オブジェクトモデルも理解してないんだよ。

さっと教えてみてくれよ。

373 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:42:57 ]
>>372
www5c.biglobe.ne.jp/~yamag/data/Soft/VBAProgramingTIPS.html
WordにもGetOpenFileNameがないらしいので参考にすれば



しかし、ここはExcel VBA質問スレだ
二度と来るな

374 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:02:19 ]
>>361ですが、
特にレスがないってのは出来ないって事でしょうか・・・

それともここにはそれだけの知識を有した方がいないんでしょうか

375 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:18:19 ]
もう来んな。臭すぎて気分悪いわ。

やっぱり俺が出て行くわ。

376 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:04:06 ]
> それともここにはそれだけの知識を有した方がいないんでしょうか
そうだよ、だから帰ってね

377 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:19:07 ]
>>341
PowerPointから
CreateObject("Excel.Application")して
GetOpenFileNameするってのもありか



378 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:59:12 ]
>>374
まあファイル総数を調べた後に1つ1つカウントすればいいんじゃね?
簡単だろ?わからないなら1から10までカウントのプログラム書いてみ?セルに表示するやつ
あとはそれをどう表現するかの問題。セルに色塗ったり、色付きラベルの長さを伸ばしたり・・・
コントロールもあったかもしれん

そもそも経過処理表示を本気で実装するのは難しい(無理)
インスコ等でも分かると思うが、人間の感覚と処理経過に乖離が発生する。

379 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 03:09:35 ]
>>374
「vba ステータスバー」でググった一番上。まさにこれかと・・・
そもそもfor文使ってるのに意味分かってないのがアウツ

380 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 06:52:18 ]
おまえらほんと優しいな、あからさまに煽ってるやつの相手してあげるなんて

381 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:25:18 ]
で?

382 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:35:17 ]
って

383 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:50:09 ]
     /ニYニヽ
    /( ゚ )( ゚ )ヽ
   /::::⌒`´⌒::::\   呼んだ?
  | ,-)___(-、|
  | l   |-┬-|  l |
   \   `ー'´   /

384 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:08:08 ]
XP、Office2003を使用しています
IEのherf="javascript:clickQuickLink('summary');"
これをクリックしてページの推移をしたいのですが

このリンクをマウスでクリックするようにvbaでクリックする方法を教えていただけないでしょうか
よろしくお願いいたします

385 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:40:56 ]
>>384
VBAを使ってのExcelの操作ではなくIE(IEオブジェクト)の操作はスレ違い>>4

386 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:30:08 ]
いちいち言わなくてよろしい

387 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:32:16 ]
言わずとも解ってる人には言わなくても良い
言わないと解らない人には言う必要がある

スレ違いな質問しちゃう人は後者なので言う必要がある



388 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:54:06 ]
ほっとけばよろしい

389 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:00:08 ]
寛容と無秩序を取り違えている人?

390 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:13:58 ]
うざいよ

391 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:17:48 ]
スレ違い認定はもういいよ

392 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:11:47 ]
論では返せず

393 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 19:14:19 ]
ならツモで

394 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 20:27:47 ]
>>361です
見付かったファイル状況ならもちろん分かります。

検索しているファイルのカウントを表示させたいんですが、
どこでどのオブジョクトを見ればよいのかが分かりません

395 名前:デフォルトの名無しさん [2009/06/04(木) 23:03:46 ]
世の中に自分で書いたソースが理解できない奴なんて居るの?

396 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:04:40 ]
2年前のソース理解できませんでした。サーセンwww

397 名前:341 mailto:sage [2009/06/04(木) 23:04:55 ]
>>373
えらい人だね

>>377
> CreateObject("Excel.Application")して
なるほど。 明日から出張なんで、帰国したら試してみる。
ありがとう。



398 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:37:34 ]
スレタイ見ようぜ。

399 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 00:10:03 ]
executeした後に、どこにファイル検索数を持ってるんでしょう?
プロパティやオブジェクトもググっても見つからないし、
executeしたらその.Executeの中身はすぐにhit数になってるし。

400 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:54:53 ]
オブジョクト

401 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:56:30 ]
オブジョイ

402 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:12:57 ]
オブジョイト

403 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:46:46 ]
EXCELの自動計算がとまってしまうことがあります
オプションの自動計算のチェックボックスはonのままです

とりあえずマクロの
Private Sub Worksheet_Calculate
を削除したところ止まらないようになりましたけど・・


原因がわかりません

404 名前:デフォルトの名無しさん [2009/06/05(金) 21:45:53 ]
Worksheets("Sheet1").Delete
これをVBAで実行すると、シートを削除するときに本当に消していいのかという
確認ダイアログを求められるのですが
これを出さずに強制的に削除する方法ってあるのでしょうか?

405 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 21:58:29 ]
>>404
Application.DisplayAlerts = False

406 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:07:20 ]
>>403
そのマクロの中身がわからんことには…

407 名前:VBA暦12時間 [2009/06/07(日) 14:49:37 ]
すみません
初歩的な所ではまっています。

下記の処理は、
”■”なら16行目に値をカウント
”□”なら17行目に値をカウント
という処理をしています(4列目に実際に加算したい数値が入っています)

この場合、何回もボタンを押すとどんどん値がふえてしまうのでボタンをおしたタイミングで16行目と17行目を0クリアしたいのですが、
コメントにしている部分を解除にすると、なぜか計算がされません。(0のまま)
どなかたどうかご教授よろしくお願いいたします。

Private Sub CommandButton1_Click()

For 列 = 5 To 27
For 行 = 5 To 10
' Cells(16, 列) = 0
'Cells(17, 列) = 0

If Cells(行, 列) = "■" Then
Cells(16, 列) = Cells(16, 列) + Cells(行, 4)

ElseIf Cells(行, 列) = "□" Then
Cells(17, 列) = Cells(17, 列) + Cells(行, 4)
End If
Next
Next
End Sub

あと自分のレベルで参考になるVBAサイトもご紹介いただけると助かります。
よろしくお願いいたします



408 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 15:52:12 ]
0にクリアするところはFor文の外にしなきゃだめだよ

409 名前:VBA暦12時間 [2009/06/07(日) 16:42:40 ]
うわっ!俺あほだ!
ありがとうございました!

410 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:46:57 ]
Option Base 1
Sub a()
Dim a
Dim b(3, 3)
'空いてる数字探し配列bに入れる
For n = 1 To 10000000
a = Range("a1:c3")
For i = 1 To 3
For k = 1 To 3
If a(i, k) <> 0 Then
b(i, k) = a(i, k)
End If
Next
Next
'実際に作成
For i = 1 To 3
For k = 1 To 3
If a(i, k) = 0 Then
'bにない数字を探す
Do
c = Int(9 * Rnd + 1)
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk


411 名前:410の続き mailto:sage [2009/06/07(日) 20:48:22 ]

Loop
fjk:
b(i, k) = c
End If
Range("a10:c12") = b
Next
Next
Next
If (1 = 2) Then
Exit Sub
'ここまで

If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
の時点で型が違いますとエラーが出ます、これは何故でしょうか?
ワークシート関数matchで検索し、配列bの中にcがあるかどうかを調べようとしているのですが、cがどんな数字でもエラーが出てしまいます。どうしてでしょうか?

コードの主な内容は、A1:C3を元に乱数で魔方陣を作ってみようというものです
配列aはA1:C3セルの数字、配列bは一時的な計算用配列です


412 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:43:55 ]
型が違うってことは型が違うんだよ!さっさと死ね!

413 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:32:48 ]
え・・

414 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:38:09 ]
んー。癖が強すぎるコードだなぁ。
余談だけど、こんな書き方を推奨してる参考書でもあるの?

条件指定なしのdoを使ってる所見ると、他言語で覚えたかな。
if thenでGoToに飛ばすコードは記憶の限りでは初めて遭遇したんだけど、
他の言語だと一般的なのかな?後学の為に教えてください。

cが宣言無しで突如出てきてるのは、まぁ良いのか。
bは2次元配列のはずなのに、matchでは何も指定されてないけど、
そこが問題じゃない?

415 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:39:10 ]
Windows:XP
オフィス:2003


VBAの勉強を始めようとセルの結合や色付けなど
ごく初歩的なマクロを使ってるのですが
マクロで実行した操作を戻ることはできないのでしょうか?

たとえばA1:B1セルの結合をすると
戻るボタンがグレーになり、保存せずに閉じて開きなおすしか戻る方法がありません。
これをマクロで実現するにはどうすればよいのでしょうか?

416 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:00:29 ]
>>414
おお!ありがとうございます!!そこでした
doloopとgotoは今回始めて使いました。参考書とかは特に見ていません。
普通はuntilなどと組み合わせるのですね

ワークシート関数のmatchは↓のページを参考にしたのです
ttp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200706/07060141.txt
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
でも
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
でも型が違うとエラーが出ます。何が悪いのでしょう?
↓できるだけまとめてみました

Option Base 1
Sub a()
Dim b(3, 3)
For i = 1 To 3
For k = 1 To 3
b(i, k) = 5
Next
Next
Do
c = 5
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
Loop
fjk:
End Sub


417 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:08:05 ]
matchなんて使った事無いんだが、2次元配列内を一発で検索出来るのか?それ。



418 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:09:01 ]
>>415
マクロで実行した物は戻せない。
結合したものを解除したいなら、結合を解けば良い。

419 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:48 ]
>>417
可能ですよ。存在してたら数字、存在してなかったら型が違うとエラーになります。
ただ>>416ではウォッチ式見ても型も同じです
Sub a()
Dim myary
myary = Array( _
"加入者番号:", "加入者:", "会社名:", "登録日:", "加入日:", _
"予定事項:", "担当者:", "部門:", "区分:", "住所:", _
"請求書住所:", "電話:", "請求書電話:", "アドレス:")
MsgBox Application.Match("登録日:", myary, 0)
End Sub


420 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:53 ]
>>416
釣りだよな?

421 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:54 ]
>>420
違います。
本気で分からないので教えてくださいorz

422 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:15:54 ]
>>419
それじゃ1次元配列じゃないか。

423 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:30:29 ]
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk

b(2,2)が配列もしくは範囲ではないから

424 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:34:55 ]
>>419
Sub test111()
Dim ar As Variant
ar = [{1,2;3,4}]
MsgBox Application.Match(1, ar, 0)
End Sub

2次元配列にmatch掛けられないじゃないか。
存在していても型エラー出る。


425 名前:416 mailto:sage [2009/06/07(日) 23:46:36 ]
申し訳ございませんでした!

426 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 15:28:10 ]
>>414
BASICではそもそもIF THENの後のGOTOは省略できるってほど
THEN GOTOが人気だったんだぜ…

>>416
この用途だと Exit Doで十分だな。
というか、今時GoToなんて苦行する必要ない。
GOTO 、GOSUBなんてのはユーザー関数が無かったころの名残。

427 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:59 ]
テキストとか読み込みとき、Line InputとFileSystemObjectの機能とどっちを使うほうがいいの?



428 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:25:23 ]
       ,-┐
 ,ィ─、ri´^-─- 、 .┌f^f^f^f^f^f^f^f^f^┐
く  / , ,'   ヽ ヽ| ~ ~ ~ ~ ~ ~ ~ ~ ~│
 `<' / ,'レイ+tVvヽ!ヽト 知ってるが  │
  !/ ,' i |' {] , [}|ヽリ  お前の態度が |
  `!_{ iハト、__iフ,ノリ,n   気に入らない |
   // (^~ ̄ ̄∃_ア____n_____|
 _r''‐〈  `´ア/トr──!,.--'
<_>─}、  `」レ
'ヽ、   ,.ヘーァtイ
   Y、.,___/  |.|
    |  i `ー'i´

429 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:04:04 ]
昔はLine Inputだったけど、今ならFileSystemObjectを使うのが一般的

430 名前:427 mailto:sage [2009/06/08(月) 22:14:12 ]
>>429
レスさんくすです

431 名前:デフォルトの名無しさん [2009/06/08(月) 23:15:19 ]
Function Line(args1)
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[args1]:R30000C[args1],RC[-1])"

こういう感じでargs1を変数にして呼び出し元で中身を変えて実行したいのですが
どうしてもうまく来ません
どうやればいいのか教えてください

432 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:46:53 ]
>>431
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[" & args1 & "]:R30000C[" & args1 & "],RC[-1])"

433 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:58 ]
俺なら
= replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", "1")
とやる事が多い

434 名前:433 mailto:sage [2009/06/09(火) 09:53:58 ]
= replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", args1)


435 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:42:12 ]
質問です。

例えばですが、「abcdefg」といった文字列に、「def」が含まれているか、
といった処理をさせようとしているんですが、どうやって比較したらよいのでしょうか?

*def*または、?def?の使い分けもできるようにしたいんですが、可能でしょうか?

436 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:50:42 ]
>>435
InStr
正規表現

437 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:40:03 ]
*def*と?def?の使い分けIをnStrでどうやるんだろ?
俺には分らんな。
Like演算子なら使い分けは簡単。
"abcde" Like "?bcd?"ならTrueだが
"abcdef" Like "?bcd?"ならFalseだ。



438 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:35:40 ]
正規表現なら、

.*def.*
.def.

だぬ。

439 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:50:52 ]
ADOからSQLで"*def*"とやるとエラーになんだよね
"%def%"もしくは"_def_"と覚えたほうがいいと思う

440 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:29:09 ]
>>437
横スレだけど、
len(str) が5文字かつ、instrが2なら "?bcd?" に該当するんじゃないかな。
正規表現やlike演算子使った方が楽だけど。

441 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:29:21 ]
×スレ
○レス

442 名前:437 mailto:sage [2009/06/10(水) 19:43:01 ]
>>440
なるほど。

443 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:11:04 ]
よこだっ!いいぞ!いいぞ!そう!よこっ!すれっ!すれっ!!よこすれっっ!!!

444 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:54:02 ]
質問です。

「マクロ→セキュリティ→Visual Basicプロジェクトへのアクセスを信頼する」にチェックを入れるのを、
マクロで行う事って出来ないんでしょうか?

445 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:59:50 ]
>>444

何のウイルスを配布するつもりなの?

446 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:16:43 ]
OS:Windows XP Professional SP2
Excel:2000

以下2つなのですが、参照している列と値を格納する配列以外は全く一緒です。
引数の参照渡しとかでまとめることはできませんか?

Yousosu=0
For Each Youin In Range(Cells(36,3),Cells(49,3))
  If Youin.Value="" Then
    ReDim Preserve Joken1(Yousosu)
    Joken1(Yousosu)=Cells(Youin.Row,2).Value
    Yousosu=Yousosu+1
  End If
Next


Yousosu=0
For Each Youin In Range(Cells(36,4),Cells(49,4))
  If Youin.Value="" Then
    ReDim Preserve Joken2(Yousosu)
    Joken2(Yousosu)=Cells(Youin.Row,2).Value
    Yousosu=Yousosu+1
  End If
Next

447 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:54:09 ]
できま



448 名前:427 mailto:sage [2009/06/11(木) 01:05:01 ]
s(ry

449 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:13:20 ]
すぇん

450 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:00:42 ]
>>446
異なる部分を引数にもつ関数作れば?

451 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:59:51 ]
>>446
やりたいことが分からんけど

Dim Joken(36 to 49, 3 to 4)

For i=36 to 49
If Cells(i, 3).value = "" Then
Joken(i, 3)=Cells(i, 2).value
endif
If Cells(i, 4).value = "" Then
Joken(i, 4)=Cells(i, 2).value
endif
Next i

452 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 13:06:37 ]
>>444
レジストリ

453 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:25:43 ]
VBAの年月を取得したいのですが

以下のように作成したのですが、

年:XXXX 4桁で取得できました。
月:XX 2桁ができません、1桁になります。

  5月なら05として取得したいのですが、修正方法がわかりません
  A1には、2009/5/1と入力しています。

VBAに詳しい方で簡単に、どうぞお願いします。

Sub sample()
Dim myDate As Date
myDate = Range("A1").Value

Range("B7").Value = Year(myDate)
Range("C7").Value = Month(myDate)
Range("D7").Value = Day(myDate)

End Sub


454 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:51:04 ]
>>445
>>452

ウイルスとかじゃなくて、あちこちアップデートが必要ににりそうなファイルを
自動でパッチあてる感じにしたいんだ

レジストリはVBEマクロでいじれるもんなの?

455 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:56:16 ]
>>453
A1が日付なら
Range("B7").Resize(, 3).Value = Split(Format$(Range("A1").Value, "yyyy/mm/dd"), "/")
の1行で充分じゃね?

456 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:19 ]
>>453
書式設定か、

Range("C7").Value = "0" & Month(myDate)

457 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:00:18 ]
>>450
そうなのですが、いろいろ試してもうまくいかなくて…

>>451
すみません。どんな動作をしたいか、書いておくべきでした。
なるほど…2次元ですか。
ただ、できれば動的配列にしたいかなぁなんて思ってまして。
2次元だと、Preserveは片方にしか利かないとか。

ありがとうございました。また、自分でも考えてみます。



458 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:03:50 ]
>>456
それじゃ10月は010になってまずいんじゃないかなぁ。
右2文字を取り出せばいいけどね。

459 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:25:21 ]
>>455
>>456
サンクス
 宣言した変数(例、TTTTTTT)に05を文字列として入力したい)

 A1に2009/5/1と入力して、あるフォルダの2009年05月XXX.xlsというファイルを
 読み込むマクロを書いています。

 よろしくお願いします。

460 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:29:22 ]
>>453
Range("C7").Value = "'" & Format(myDate, "mm")

これじゃダメかな?

461 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:35:54 ]
>>459
Format$(Range("A1").Value,"yyyy年mm月XXX")の文字列を作ってWorkbokks.Openと組み合わせるだけ。

462 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:25 ]
>>460
できました。
 サンクス
   , - ,----、
  (U(    )
  | |∨T∨
  (__)_)


463 名前:デフォルトの名無しさん mailto:  [2009/06/12(金) 01:08:40 ]
取得した文字列を、すでに宣言した変数名と一致させて
使いたいのですが、できますか?
やりたいのは

Dim ABCDE As Integer
Dim moji As String

moji = AB
"moji"CDE = 5

みたいな感じです




464 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:32:11 ]
>>463
変数はただの入れ物だから、無理じゃないかなぁ

何がやりたいか詳しく書いてくれたら、
別の方法になるかもしれないけれど、実現できるコードを考えられるかも

465 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:26:27 ]
>>464
たぶん>>463が言いたいのはリフレクションを使って
動的に変数を追加・参照することは出来ないかってことじゃね?
そんなことをして、なんになるのか分からないが、そういうことだと思う
# javascriptで関数電卓のフレームワーク+プラグイン(関数やらが定義されてたりする)を作ったときに使ったくらいかな?

たぶん、VBAのリフレクションは貧弱だから出来なさそうな気がする。
だけど、サンプルを見る限り、連想配列で良いんじゃね?って思うな。

最終的にやりたいことは
userStatus("Jonson") = "空腹"
userStatus("Harris") = "眠い"
userStatus("cherry") = "ピヨピヨ来た"
ってことでしょ。

VBAでどうやって連想配列を使うか知らないけど。
# たぶん、つかえないだろうなぁ
# 無かったら、自分で作ればいいけど、速度面でどうなんでしょうねぇ。
# 下手なハッシュ関数作るより、 配列二つ並べて、逐一中身を検索した方が早かったりしてw

466 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 05:21:46 ]
>>463
okwave.jp/qa2033484.html
これみたいなカンジ?

467 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:05:14 ]
>>465
なんか、全然わかってなくて書いちゃって恥ずかしいっす。
教えてくれてあんがと。

連想配列の使い方を調べたら、Dictionaryオブジェクトだらしいです。



468 名前:463 mailto:  [2009/06/12(金) 07:51:24 ]
"moji"CDEってのが変数ABCDEのつもりです


たとえば
takeda
aoyama
tanaka
sirakawa
aoyama
koyama

みたいな50種類くらいの名前がかぶりつつ列挙されてて、それぞれ何個
でてきたかしりたいのです。
変数 aoyama_name,koyama_name,takeda_name
と人数分の変数を宣言しておいて、セルの文字列を順に取得し、
その文字列に対応する変数にカウントしていく方法ができないかと



469 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 08:13:29 ]
該当したらインクリメントすりゃ良いんでないかい?
Instrでもlikeでも正規表現でも、何でも良い様な気がする。

470 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:34:58 ]
>468 こういうことでいいのかな。
A列に(1行目から)集計対象があり、B列、C列に集計結果を出力する。
Option Explicit
Dim 名前(100) As String, 件数(100) As Integer, i As Integer, i_max As Integer, 縦 As Long, 内容 As String
Sub カウント()
  Call 初期処理
  内容 = Cells(縦, 1).Value
  Do While (内容 <> "")
    If i_max = 0 Then
      名前(0) = 内容: 件数(0) = 1: i_max = 1
    Else
      For i = 0 To i_max
        If 内容 = 名前(i) Then
          件数(i) = 件数(i) + 1
          Exit For
        Else
          If i = i_max Then
            名前(i_max) = 内容: 件数(i_max) = 1: i_max = i_max + 1
            Exit For
          End If
        End If
      Next i
    End If
    縦 = 縦 + 1: 内容 = Cells(縦, 1).Value
  Loop
  For i = 0 To i_max - 1  '集計結果の出力
    Cells(i + 1, 2).Value = 名前(i): Cells(i + 1, 3).Value = 件数(i)
  Next i
End Sub
to be continued

471 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:38:23 ]
続きです
Private Sub 初期処理()
  For i = 0 To 100
    名前(i) = "": 件数(i) = 0
  Next i
  i_max = 0: 縦 = 1
  Exit Sub
End Sub
以上
出現順に名前を格納する配列と件数を格納する配列を用意して、セルの内容を読み込む都度
名前配列を順に調べていく、初めてならば添字を+1して名前を格納し、同じ添字の件数配列
に1をセットするというやり方です。もっとスマートな方法があればお知らせください。

472 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:25:10 ]
>>468
Excelの本来の機能は表計算ソフトだから、個数を集計する方法はいくつもあるよ。
COUNTIFとかピボットテーブルとか。
VBAだけでやろうとするより、ワークシートにデータを入れちゃって集計の関数を使った方が早い。

VBAだけでやりたいならDictionaryって便利な機能がある。同じ物があったかどうかのチェックが
とても簡単。

Sub 集計()
  Dim name() As String  'テスト用データを用意
  name = Split("takeda,aoyama,tanaka,sirakawa,aoyama,koyama", ",")
  Set dic = CreateObject("Scripting.Dictionary")

  For Each n In name  '配列で集計
    If dic.exists(n) Then
      dic(n) = dic(n) + 1
    Else
      dic.Add n, 1
    End If
  Next

  For Each d In dic  '結果出力
    Debug.Print d, dic(d)
  Next
End Sub

473 名前:470 mailto:sage [2009/06/12(金) 13:14:48 ]
>472
こういうことができるんですね。
集計対象データが大量の場合は、いったん文字列変数にに","をはさんで連ねていくことになりますね。
Dictionaryの機能は半角英数の大文字・小文字の別とか日本語対応はどうなんでしょう。


474 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:25:58 ]
>>473
あくまでもサンプルだから , で区切ったデータを用意したけど、
実際のデータはワークシートやファイルから読み込むのが普通。
キーワードには日本語も使える。英字の大小は区別される。
データを "鈴木,高橋,山田,田中,鈴木,高橋" に変えて試してみ。

475 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:28:42 ]
50件程度なら重複チェックを省略しても、とりたてて問題はない。

  For Each n In name  '配列で集計
    dic(n) = dic(n) + 1
  Next

たったこれだけで集計できる。
データが増えると遅くなるけど。

476 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:22:18 ]
UserFormから数式を入力させて、その数式に該当するセルに処理を行いたいのですが、
ヒントになるサイトか関数などあれば教えてください。よろしくお願いします

477 名前:463 [2009/06/12(金) 16:27:12 ]
実は集計するだけではなく、
高橋 100点
三根 98点
山田 100点
高橋 100点
青山 97点
山田 99点 
(50人くらい、データは1000件くらい)

で100点の人だけ集計して100点の高橋が何人いて、
100点の山田が何人いるみたいなことをしたかったので、
100点で検索して左のセルをみて、
文字列を取得して、その取得した文字列と
関連するの配列名にカウントしたかった
のですが、どうもdictionaryでできそうです。
みなさんありがとうございました。



478 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:27:50 ]
「数式に該当するセル」が意味不明
実例を示せ

479 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:15 ]
>>477
その程度ならVBAなんぞ使わんでも一発で集計できるがね


480 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:43:26 ]
>>478
失礼しました

やりたいことは条件付き書式設定のようなことで、
例えば

30
20
50
60
40
80

というセルを選択した後、ユーザーフォームから数式を入力してボタンを押すと
数式に該当するセルに対して、処理を行うということです。
条件付き書式設定を使えというのは無しでお願いします。。。

481 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 17:31:32 ]
列なの行なの?
なんなのその数字。

482 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 18:13:09 ]
Chr(13)とvbCrlfの使い分けの判断は何?

483 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:49:23 ]
vbCrLf = Chr(13) & Chr(10)
Chr(13) = vbCr
Chr(10) = vbLf

484 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:11:04 ]
>>482
改行コードは状況によって変わることがあるから
Chr(13)とかChr(10)とかに固定すると具合が悪いこともある

485 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:20:26 ]
ぜんぜん「数式に該当するセル」の説明になってない…

486 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:26:08 ]
俺がエスパーすると
数式の解に該当する数字の入ったセル

487 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:58:14 ]
数式: >=50
数式に該当するセル: 50 60 80

ってことじゃね



488 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:10:30 ]
俺がエスパーすると、

フォームから「A2=A1+10」と入力する。A1に5が入っていたとしたらA2に15を入れる。

どうだ?

489 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:27:04 ]
463が説明しようとする度にエスパーが大量に必要になりそうな悪寒
何をどうしたいのか細切れに話そうとしてるからますます判らん w

490 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:28:17 ]
       ____
     /_ノ  ヽ、_\
   o゚((●)) ((●))゚o   ,. -- 、
  /::::::⌒(__人__)⌒:::::: /    __,>─ 、
  |     |r┬-|    /          ヽ
  |     | |  |   {            |__
  |     | |  |    }  \       ,丿 ヽ
  |     | |  |   /   、 `┬----‐1    }
  |     | |  |  /   `¬|      l   ノヽ  wwwwwwwwwwwwwwwww
  \      `ー'ォ /    、 !_/l    l    /  }
           {       \     l   /  ,'
           \      ´`ヽ.__,ノ  /   ノ
             \     ヽ、\ __,ノ /
               ̄ ヽ、_  〉 ,!、__/



491 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:49 ]
>>480
数式からEvaluateで戻り値を求めて、その戻り値でフィルターにかけりゃいいじゃん。
それともフィルタオプションで検索条件範囲の1行目を空白にして、2行目に=A2=数式と書きだして抽出するとかね。

492 名前:491 mailto:sage [2009/06/13(土) 16:24:49 ]
俺のエスパー度はマグニチュード7くらいの自信があるから上で間違いないな。

493 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:52:40 ]
463まとめ
>>463
>>468
>>477
>>480


494 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 21:30:24 ]
>>493
仲間はずれがいるぜ。
>>480>>476だな。

495 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:23:18 ]

                  /   ノノ ノノノ ヾヽ、ヽ
               /   ノj `      ´ i |    
               i    {   ` , ,-,、´  i | 
              {    i     )-―-'(  i |    
                 ヽ   i     ⌒   } |_,,,. -‐- 、  
              __)), ,ノ人   、_,  ノ''"´   ,      \ 
                /       ` ー--,. '´   . : :`(      ゝ、
               /           : : :: :´: .         : :\ , ' ´_   ヽ
           /  r´: :       : : : :       ,. ' ´ ヽ>'´    ,'ヽ!
             / γ: :        ノ    _   ,, 、,, ,,__i  。 ./       ; ,!
           i   ir' " ヽ    ,,, ''' ´         `"7         :/ 
         i  |、 ° }, '                 ` y'         /
   "'''‐‐- ...,,,_|   ヽ、ー/           __    _/          /
             `'''-,,,て          ´    ̄ ̄ /          ,イ 
             `''-、__/            /    `  / ,!    _,
                     `''-,,_     ,..、_,,..イ´      i'´  `ゝ''"´
                    \_ ,,,,,...ゞ、_           |ー-/  
                           ミ〉       !r'´
                         ヽ   ミ/、 /|  i  i }







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<136KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef