Excel VBA 質問スレ Part27
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/11/25(日) 20:19:47.50★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:Excel VBA 質問スレ Part26
http://toro.2ch.net/test/read.cgi/tech/1345363310/
0002デフォルトの名無しさん
2012/11/25(日) 20:20:18.07http://toro.2ch.net/test/read.cgi/tech/1342087380/
0003デフォルトの名無しさん
2012/11/25(日) 20:26:49.17T, M, R
T, M, R
0004デフォルトの名無しさん
2012/11/25(日) 20:29:39.60くださいです。。。
。。。
くださいです (ワラ
0005デフォルトの名無しさん
2012/11/25(日) 20:32:51.83WorkbookのWindowsプロパティやActiveWindowだと
状況によって意図しないWindowを取得してしまいそうなんですが
0006デフォルトの名無しさん
2012/11/25(日) 22:27:14.08http://p.twpl.jp/show/orig/htR9M
できるだけたくさんのデータをVBAを使って収集したいのですが、
そのために使用するブラウザを操作してwebからデータを集めるための使用するステートメントや関数などのコードは
どんなものがあるか代表的なものから便利なものまでひととおり教えていただけませんか?
お約束のようなので付け加えますと
(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
0007デフォルトの名無しさん
2012/11/25(日) 23:23:56.040008デフォルトの名無しさん
2012/11/26(月) 00:11:55.40MSDNライブラリ
0009デフォルトの名無しさん
2012/11/26(月) 00:16:20.290010デフォルトの名無しさん
2012/11/26(月) 00:31:24.22本とかサイトに沿って勉強しようとしてる時点で向いてない気がするよ
とりあえず書いて困ったら検索の方が合ってる言語だと思う
大抵やりたいことをぐぐれば答えが見つかるし
0011デフォルトの名無しさん
2012/11/26(月) 01:40:29.54それは他言語の経験がある人の場合だな
どんなに簡単な言語でも素人がいきなり書くのは無理
アルゴリズムとか変数の概念とか、言語の種類に関係ない基本事項はやっぱりきちんと勉強しないと
0012デフォルトの名無しさん
2012/11/26(月) 01:44:25.23最近のマラソンは仮装して走るのがブームらしいね
先週はこんな人が優勝してる
ttp://24.media.tumblr.com/tumblr_mdqqq5Pgot1qziltwo1_500.jpg
00137
2012/11/26(月) 01:46:15.16ありがとうございます
0014デフォルトの名無しさん
2012/11/26(月) 03:01:49.13┏ ━ゝヽ''人∧━∧从━〆A!゚━━┓。
╋┓"〓┃ < ゝ\',冫。' ∩___∩ ゛△│´'´,.ゝ'┃. ●┃ ┃┃
┃┃_.━┛ヤ━━━━━ | ノ ヽ━━━━━━━━━ ━┛ ・ ・
∇ ┠─Σ-/ ● ● | ァ Ζそ,´; ┨'゚,。
.。冫▽ < | ( _●_) ミ 乙 ≧ ▽ >>1乙
。 ┃ 彡、 |∪| 、`\ │ て く
┠─./ __ ヽノ /´> )'.┼ ァ Ζ┨ ミo''`
。、゚`。、 (___) / (_/' × 个o
○ ┃ `| / !ヽ.◇ o┃
┗〆━┷ Z,.' /┷━''o ヾo┷+\━┛,゛;
ヾ '、´ ∇
0015デフォルトの名無しさん
2012/11/26(月) 05:29:33.77トップだけあって、お面と足の筋肉のギャップが凄いなw
0016デフォルトの名無しさん
2012/11/26(月) 18:45:48.12多摩レボリューションだっけ?
0017デフォルトの名無しさん
2012/11/26(月) 20:30:34.9700186
2012/11/26(月) 21:17:48.15こちらでした。
http://www.moviecloud.jp/osaka2012/
0019デフォルトの名無しさん
2012/11/27(火) 12:51:37.37という使い方の場合、
その配列が
redimしてあるかどうかを調べる方法ってありますか?
別プロシージャから引数で渡された配列を処理する時に、
宣言だけでredimされていない変数は処理をスキップしたいのですが、
isarrayでは区別できませんでした。
(要素数が指定されてなくてもtrueになってしまう。)
使用しない変数にもredim (0) をするのは、
コードの改修がかなり必要になるので、出来れば避けたいです。
何か良い方法がありましたらアドバイスいただけると幸いです。
002019
2012/11/27(火) 13:02:23.62redimされてない変数を処理すると
実行時エラー '9':
インデックスが有効範囲にありません。
というエラーがでるからです。
0021デフォルトの名無しさん
2012/11/27(火) 13:53:38.86なんだろう、この気持ち悪さは
0022デフォルトの名無しさん
2012/11/27(火) 14:51:52.95それ単なるバグじゃ?
0023デフォルトの名無しさん
2012/11/27(火) 15:43:04.91UBound
002419
2012/11/27(火) 15:53:11.68そうです、私の書いたコードのアルゴリズムがまちがってるので
エラーになります。
根本的に直すのは複数箇所の修正が必要になるので、
小手先でごまかそうと考えて先の質問をしました。
>>23
ありがとうございます。
残念ながらuboundもダメでした。やはり
インデックスの有効範囲〜
のエラーになります。
0025桃白白
2012/11/27(火) 16:04:24.14あろーはー。例外捕まえちゃったら?
Array関数で作った要素数0の配列は0から-1までになるから
これを真似しちゃったらいんじゃない。
UBound(a) - LBound(a) + 1で要素数を求めるときにも整合性取れるし。
こんな感じで。
https://friendpaste.com/4gLpu6eKECJSBtzyhlIocW
0026デフォルトの名無しさん
2012/11/27(火) 16:08:10.23On Error
002719
2012/11/27(火) 16:08:11.75とりあえず、邪道ですがエラートラップを用いて応急的に対策しました。
お騒がせして申し訳ありませんでした。
ちなみにこんな感じです。
On Error Resume Next
If UBound(hoge) < 0 Then
On Error GoTo 0
Else
On Error GoTo 0
[本来の処理]
End If
002819
2012/11/27(火) 16:11:50.63アドバイスありがとうございました。
今後の参考にさせて頂きます。
0029デフォルトの名無しさん
2012/11/27(火) 16:12:40.19003019
2012/11/27(火) 16:22:47.40どうもすみません、教えていただいたキーワードでぐぐったら出てきました。
大変参考になりました。
ttp://app.m-cocolog.jp/t/typecast/652919/549018/73143358
ここにあった not not で解決でした。
皆様ありがとうございました。
0031デフォルトの名無しさん
2012/11/27(火) 16:56:47.35If not not varArray Then
とか、何を調べてるのかぱっと見意味不明だし。
If IsVarArrayEmpty(varArray) Then
とか
If Not IsVarArrayEmpty(varArray) Then
だったらわかりやすいでしょ。
0032デフォルトの名無しさん
2012/11/27(火) 21:56:55.29質問させてください、お願いします。
・Windows7,Office2007です。
1
2
1
0.5
2
…
と、D行に数字がありまして、合計8になるように並び替えたいのです。
もし、1+2+0.5…=7.5となった段階で、次の並びが1、2、0.5となっていた場合は、
1や2ではなく、0.5を選択したいです。
そして、1や2が入っていた行の上に、0.5が入っていた行を持ってきたいのです。
これを、配列がなくなるまで続けたいのですが、どのようにすればいいかが掴めません。
ご教授、宜しくお願いします。
0033デフォルトの名無しさん
2012/11/27(火) 22:06:42.34質問1 数字は0.5、1、2の3通りだけ?
質問2 全体の合計は8の倍数になってる?整理したらきっちり最後まで「合計8」のグループに分けられる?
0034デフォルトの名無しさん
2012/11/28(水) 00:31:29.04困ってること:文字列(フォント)の横幅dot数を調べたい
Graphics.MeasureString メソッドがあればいいんだけれど、エクセルなので・・・
どうしたらいいでしょうか
0035デフォルトの名無しさん
2012/11/28(水) 01:20:43.77GetTextExtentPoint32
0036デフォルトの名無しさん
2012/11/28(水) 01:22:49.74003732
2012/11/28(水) 02:13:13.20ご回答ありがとうございます。
質問1 数値自体はその3つのみです。
質問2 いえ、全体の合計は不明です 少なくとも、8の倍数キッカリには収まりません
0038デフォルトの名無しさん
2012/11/28(水) 02:31:18.33ループ(
1 D行を足す、列番号を取得
2 8未満である
Y→1
8である
Y→ループ抜ける
8以上である
Y→最後の加算を破棄して次の列にいく→1
)
3 取得した列番号を基に列を入れかえる
0039デフォルトの名無しさん
2012/11/28(水) 02:37:08.01まず一点、誤りを指摘すると、
エクセルでは「D行」とはいわず「D列」といいます。
「行」というのは1〜の縦方向、
「列」というのはA〜の横方向の呼び方です。
それであなたの質問に対する確認なのですが、
行を入れ替える条件はもっと限定できませんか?
たとえば、
1
2
2
2
0.5
1
2
0.5
と並んでいたら
1+2+2+2+0.5…(2個飛ばして)+0.5
で8ですが、
1+2+2+2…(1個飛ばして)+1
も8になります。
つまり数値の取り方に複数の候補がある場合、
どれを優先すればよいのかがよく分からないのです。
その部分はもっと厳密に説明する必要があると思います。
0040デフォルトの名無しさん
2012/11/28(水) 03:24:12.410041デフォルトの名無しさん
2012/11/28(水) 04:02:04.18身も蓋もないことを
004232
2012/11/28(水) 08:57:48.88>>39 すみません、初歩的なミスでしたorz
順番ですが、上にあるもの程、優先になります。
その例ですと、1+2+2+2+0.5…(2個飛ばして)+0.5
を選択し、飛ばした先にある0.5を、
1+2+2+2+0.5 の次に並び替えるようにしたいです。
>>40 説明不足でした、優先順位がありますorz
0043デフォルトの名無しさん
2012/11/28(水) 18:28:43.80その方法をVBAで実装する段階になってから質問しろや
004432
2012/11/28(水) 18:32:59.44>>38さんのアドバイスを参考に、
汚いソースになりましたが、なんとか完成致しました。
スレ汚し、失礼しました
004534
2012/11/28(水) 18:34:40.00というかここでいいのかわからんけど
Excel2000 64bit機でGetTextExtentPoint32を動かす方法教えてください
Excel2000 32bit機では正常に動作しました
Office2007 64bit機で動作させるにはPtrSafeを挿入すればいいらしいんですが不明です
Excel2000 64bit機でPtrSafeがコンパイルエラーになってしまいます
GetTextExtentPoint32の使用はここを参照にしました
ttp://tamagolab.raindrop.jp/wiki/index.php?Excel%20VBA%20%A4%CE%A5%E1%A5%E2
0046デフォルトの名無しさん
2012/11/28(水) 18:43:41.56どっちにしてもOSの情報わからんと何とも言えんわ
004734
2012/11/28(水) 19:09:14.68何か勘違いしてたかも
>>45の
19: hWnd = Application.hWnd
でエラーが発生して動作しなくなりました
winXP 32bit機 Excel2000の入ってるPC引っ張り出してきて実行したところ
オブジェクトはこのプロパティまたはメソッドをサポートしていません
とエラーを生成しました
PC環境で実行できたり出来なかったりするんですが、何か参照設定が必要だったりするのでしょうか
004834
2012/11/28(水) 19:22:47.39Application.hWnd てexcel2000じゃサポートしてないのか
ってことですよね
0049デフォルトの名無しさん
2012/11/28(水) 20:34:16.35PtrSafe
0050デフォルトの名無しさん
2012/11/28(水) 21:29:13.31OSに32/64ビットの区別があること
EXCELに32/64ビットの区別があること
を理解してから出直してください
0051デフォルトの名無しさん
2012/11/28(水) 21:43:29.610052デフォルトの名無しさん
2012/11/28(水) 22:06:49.53OSとか関係ないって突っ込んでるの一人もいない・・・
0053デフォルトの名無しさん
2012/11/29(木) 12:17:23.260054デフォルトの名無しさん
2012/11/29(木) 13:30:43.87Excel2000の時代にはウィンドウハンドルが簡単に拾えるApplication.Hwnd なんて
便利なものは無かったからな。
Excel2000も守備範囲なら API FindWindow でExcelのウィンドウハンドルを取得
するようにしておけば新旧Excelで使える。数行増えるだけだし。
ってVBAからだんだん離れるのであとはググれ
0055デフォルトの名無しさん
2012/11/29(木) 17:50:02.29でもExcel2000は32bitしかないでしょ。
13年前のソフトだよ?
0056デフォルトの名無しさん
2012/11/30(金) 18:40:44.70指定したディレクトリの中にあるファイル一覧を取得しようと
下記コードを書いたのですがなぜか、エラーが出てしまいます。
どこに問題があるのでしょうか?
Dim path_test As String
path_test = "C:\test"
Dim file_count As Integer
file_count = 0
strFileName = Dir(path_test & "\*.*", vbNormal)
Do While strFileName <> ""
strFileName = Dir() '★エラー発生★
file_count = file_count + 1
Loop
★エラー発生★
実行時エラー'5': プロシージャの呼び出し、または引数が不正です。
0057デフォルトの名無しさん
2012/11/30(金) 18:47:30.110058デフォルトの名無しさん
2012/11/30(金) 19:08:22.96エラーの起きる場所は分かってるのですが
strFileName = Dir() ← なぜここでエラーになりますか?
ネットで解説されたコードをそのまま利用しているのですが
その解説サイトの人は特にエラー発生の可能性については言及していませんでした。
0059デフォルトの名無しさん
2012/11/30(金) 19:16:01.88これが全ソースコード?
このコードだけをサブプロシージャにしてエラーが出るの?
変数の命名ルールがキショいね
0060桃白白
2012/11/30(金) 19:24:36.72そのコードには問題ないアルよ。
最初のDirを忘れてたり再帰でぐーるぐるしてたりするんじゃない?
桃白白はそういう疑念を持っています。
0061デフォルトの名無しさん
2012/11/30(金) 19:25:31.16フォルダ名一覧取得するためにstrFileNameとやらの中身に入れるなら別のstring型変数いれないと
0062デフォルトの名無しさん
2012/11/30(金) 19:28:37.98C:\testってちゃんとフォルダが存在するよね?
0063デフォルトの名無しさん
2012/11/30(金) 19:43:20.30良かったら教えて下さい
0064デフォルトの名無しさん
2012/11/30(金) 19:44:13.23こいつ・・・動くぞ・・・!
0065デフォルトの名無しさん
2012/11/30(金) 20:01:42.85tempフォルダかその中のファイルに、アクセス権のないのがあるんじゃ?
006656
2012/11/30(金) 20:02:47.65問題となる部分のコードです。
一部ネット上に転がっていたソースを流用している為です。
>>60 >>61 >>62
再起処理はやっておりません。
また、 c:\test も存在しています。
私の環境が問題なのかなぁ?
Excel2010 でマクロ組んでるんですけどん。
0067デフォルトの名無しさん
2012/11/30(金) 20:50:27.10tempじゃなくてtestだった
フォルダなくてもエラーにはならないっぽいから、フォルダはあるのに
ファイルかフォルダにアクセス権ないんじゃ?
0068デフォルトの名無しさん
2012/11/30(金) 20:58:36.04問題となる部分かどうかはお前が判断するな
全コードを提示して
0069デフォルトの名無しさん
2012/11/30(金) 21:13:43.14ツールバーの該当コマンドボタンの▼をクリックするとカラーパレットが展開されて
そこから色を選ぶことができるんだけど
例えば
セルに下線を引くマクロを作ったとして、複数セルを選択し
・マクロボタンの▼をクリックして、カラーパレットが展開されて、「カラーを選んで下線を引く」
フォントの既定組み合わせ{明朝11、明朝13、ゴシック10、ゴシック11、ゴシック13}等を設定しておき
・マクロボタンの▼をクリックして、フォント・フォントサイズの組み合わせから選択して「フォントを変更する」
みたいなことってできますか?
0070デフォルトの名無しさん
2012/11/30(金) 21:36:36.330071デフォルトの名無しさん
2012/11/30(金) 22:18:21.46書式設定とか普通
0072デフォルトの名無しさん
2012/11/30(金) 22:52:14.28ちなみにエラーが発生したとき、
変数"file_count"の値はどうなってます?
(コード中断時に file_count の上にマウスカーソル持ってくれば値が表示されます)
0073デフォルトの名無しさん
2012/12/01(土) 00:57:31.13ありがとうございます。
どうしてもDirを使った方法だとできなかったので Fileうんたらの方法を使ってうまくいきました。
0074デフォルトの名無しさん
2012/12/01(土) 01:39:54.570075デフォルトの名無しさん
2012/12/01(土) 01:47:50.06アドイン公開してる人がいたような
ググればすぐに見つかるはず
0076デフォルトの名無しさん
2012/12/01(土) 08:06:00.760077デフォルトの名無しさん
2012/12/01(土) 08:17:19.22VBAではないが
セルに入力規則を設定して
マウスで候補を選ばせるのはどう?
0078デフォルトの名無しさん
2012/12/01(土) 09:06:41.20入力規則のこと忘れてました^^;
それが良いですね。ありがとです
0079デフォルトの名無しさん
2012/12/01(土) 09:11:06.92>>77の方法が一番簡単だけど、
どうしてもVBAでやりたかったら対象のシートにこんなマクロを設定してみる。
特定のセルのみの設定なら修正が必要。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tmpRange As Range
For Each tmpRange In Target
If tmpRange.Value <> 1 And tmpRange.Value <> 9 Then
tmpRange.Value = ""
End If
Next
End Sub
0080デフォルトの名無しさん
2012/12/01(土) 09:34:57.53ありがとう。今やってんのはC3セルのみなんで
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$C$3" Then
If Range("c3").Value <> 1 And Range("c3").Value <> 9 Then
MsgBox "値は1,9のいずれかのみ 訂正!", vbOKOnly
End If
End If
Application.EnableEvents = True
End Sub
という事にしました。入力規則も簡単で良いんですが、VBAの勉強も兼ねて^^;
0081デフォルトの名無しさん
2012/12/01(土) 11:28:36.00targetをFor EachしてC3セルだった場合にだけチェックするように書き換えないと
これはVBA以前の問題で全てのケースを洗い出す想像力大切よ
0082デフォルトの名無しさん
2012/12/01(土) 12:17:58.08V = Range("$C$3").Value
If V <> 1 And V <> 9 Then MsgBox "$C$3 is 1 or 9 only.", vbOKOnly
でいいじゃん入力規則でいいじゃん
0083デフォルトの名無しさん
2012/12/01(土) 12:28:30.430084デフォルトの名無しさん
2012/12/01(土) 13:52:56.94どうがんばっても人間の指の方が遅いんだから
0085デフォルトの名無しさん
2012/12/01(土) 20:37:23.52操作する人間に対するレスポンスが早いか遅いかって話で、操作性の問題だな
人間の感覚でとらえられないぐらいの差ならどうでもいい
0086デフォルトの名無しさん
2012/12/01(土) 21:08:25.23c:\test\ を
c:\test
という具合に末尾の \ を削除したいのですがどうすれば末尾の特定文字を削除する事が出来ますか?
0087デフォルトの名無しさん
2012/12/01(土) 21:13:58.31left でいけた。いkぅぅう
0088デフォルトの名無しさん
2012/12/01(土) 21:51:02.08それだけのためにマクロ入れたらxlsmにするとかマクロ有効にするとかで嫌がられないか?
0089デフォルトの名無しさん
2012/12/01(土) 21:51:36.030090デフォルトの名無しさん
2012/12/02(日) 14:47:52.43セルに書き出すようなExcelVBAのサンプルなどはございますでしょうか?
よろしくお願いいたします。
0091デフォルトの名無しさん
2012/12/02(日) 15:03:44.970092デフォルトの名無しさん
2012/12/02(日) 15:06:15.54「vba HTTP/HTTPSで通信を行い、JSONP」でぐぐれ
0093デフォルトの名無しさん
2012/12/02(日) 15:49:07.67ありがとうございmす、さっそくググってきます!
0094デフォルトの名無しさん
2012/12/05(水) 11:38:23.57ぐぐったら以下のようなコードが出てきましたが、数値で指定するのはなんだかスマートじゃない気がします
ActiveSheet.Cells.Select
Selection.RowHeight = 13.5
Selection.ColumnWidth = 8.38
例えばRowHeight.SetDefaultみたいに初期化する方法が用意されていたりはしないんでしょうか?
0095デフォルトの名無しさん
2012/12/05(水) 13:15:35.60個人用のマクロ(フォームモジュールと標準モジュールの2つのファイルがある)をインポートさせてあげたいんですが
中にはおじいちゃんおばあちゃんがいるので
手順を示すのではなくVBAに似たVBSでスクリプトを書いて
そのファイルをダブルクリックすればいいだけ、というようにしたいです。
どうすればできますか?
0096デフォルトの名無しさん
2012/12/05(水) 13:41:30.95とりあえずこんな感じのコードをAutoOpenに仕込めば可能だけど
Workbooks("Book1.xls").VBProject.VBComponents("Module1").Import Filename
全部で何人(何台)あるの?
作る手間と説明する手間を考えると、もし100台程度なら昼休みに自分と数人の詳しい仲間でクリックして回った方が早いよ
どんなに簡単にしても、普段と違うことはできない人、更新の指示を見落とす人なんかが年齢に関係なくいるし
設定をいじっちゃってて作ったスクリプトがうまく動かないマシンなんてのも必ず出てくる
仕事で使うんならあんまり凝ったことはせずに確実にやる方法を考えた方がいいよ
0097デフォルトの名無しさん
2012/12/05(水) 13:50:17.79ありがとうございます。
たしかに机を回るのも手だけど
コードもときどき更新するので
そのたびに机を回るのは今後を考えると面倒。
そのAutoOpenを検討させていただきますね。
0098デフォルトの名無しさん
2012/12/05(水) 23:12:50.18これでIEのクリック操作で押せるボタンがあります
変数で使いたいので下記のようにするとエラーとなり押せません
変数を宣言しないと押せます(Variant型)
ここに使えるデータ型は何でしょうか?
Dim ID As String
ID = "BtnID"
objIE.Document.All(ID).Click
0099デフォルトの名無しさん
2012/12/06(木) 00:10:18.70ここには「整数または文字列」って書いてあるね
http://msdn.microsoft.com/ja-jp/library/cc410318.aspx
getelementbyidじゃダメなの?
ちなみにココはExcelの質問スレだからスレチだよ
以降は>>2に移動してね
0101デフォルトの名無しさん
2012/12/08(土) 18:27:44.41たとえばC13からF13に数値が入っていたとして
Dim hairetu(4) As Integer
hairetu = Range("c13:f13")
とかってすると
コンパイルエラー
配列には割り当てられません
って出るんだけど何か方法とかありません?
例は範囲が小さいからループでも大したことはないけど、これが大きくなると…と思いまして
0102デフォルトの名無しさん
2012/12/08(土) 18:38:06.95for each使うとかいろいろ手段はあるけど
変数をvariant型にして
変数 = range("セル範囲")ってすれば変数にセルの内容ぶちこめる
その後配列に入れるとかするとちょっと楽
0103デフォルトの名無しさん
2012/12/08(土) 19:17:17.62すいません、ちょっと具体的にお願いm(__)m
101の例で
Sub testArray()
Dim i As Integer, j As Integer
Dim hairetu(4) As Integer
Dim ha As Variant
ha = Range("c13:f13")
〜
For i = 0 To UBound(ha)
hairetu(i) = ha(i)
MsgBox hairetu(i)
Next
End Sub
〜の部分で配列に分解するのはどうするんですか?
0104デフォルトの名無しさん
2012/12/08(土) 19:26:58.89Sub testArray()
Dim i As Long
Dim ha As Variant
ha = Range("c13:f13")
For i = 1 To UBound(ha, 2)
Debug.Print ha(1, i)
Next
End Sub
0105デフォルトの名無しさん
2012/12/08(土) 19:36:41.51for each in i
hairetu(変数) = i
next
二元配列の場合変数を加工
多分調べればスマートなやり方いくらでも落ちてると思う
0106101
2012/12/08(土) 19:47:51.780107デフォルトの名無しさん
2012/12/08(土) 19:59:44.60IsArray(ha)でtrueが返ってくるのに配列じゃないの?
0108デフォルトの名無しさん
2012/12/08(土) 20:02:30.00なんていえばいいのやら
中みれば判るけどデータ上は二元配列になってるから普通の配列として扱うのは宜しくない
0109デフォルトの名無しさん
2012/12/08(土) 21:25:11.94どういうこと?
haをウォッチしてみたけど普通の二次元配列だったよ?
0110デフォルトの名無しさん
2012/12/08(土) 21:31:38.87横から失礼します
二元配列ってどういう意味ですか?
ググって見たのですがよく分かりませんでした。
いわゆるジャグ配列ということでしょうか?
それとも二次元配列のことでしょうか?
ちなみに自分はセルの値をしょっちゅうVariant変数に代入して、
それをFor Nextで加工してます。
特に何も考えずに普通に二次元配列として扱ってました。
0111109
2012/12/08(土) 21:32:21.310113デフォルトの名無しさん
2012/12/08(土) 22:04:44.84単一セルのRange.Valueは配列にはならない
0114デフォルトの名無しさん
2012/12/08(土) 22:35:47.770115デフォルトの名無しさん
2012/12/08(土) 22:48:19.06range型の配列ってのも何を指すかはっきりしない
0116デフォルトの名無しさん
2012/12/08(土) 22:53:06.35Excel2007で.xlsで保存してるんだけどマクロのセキュリティはあらかじめExcelの方で設定しなきゃいけないんだよね?
有効にしても動かないしどれ選んでも動かないんだけどどうしてなの?
0117デフォルトの名無しさん
2012/12/08(土) 23:07:12.720118デフォルトの名無しさん
2012/12/08(土) 23:13:26.220119デフォルトの名無しさん
2012/12/09(日) 12:45:44.13ループ回して入れたほうが速いけどVariant型変数に
hairetu = Application.Index(Range("C13:F13").Value,0)
とすればhairetuは一次元配列になってる
0120デフォルトの名無しさん
2012/12/09(日) 12:47:25.200121デフォルトの名無しさん
2012/12/09(日) 21:23:12.00その時解決した質問はSheet1でセルを選択した時にSheet2の関連度を呼び出してソートする方法でした
http://www.dotup.org/uploda/www.dotup.org3715704.png
例えば,C1[う]を選択したら,Sheet2で[う]をみると関連のある順に[う][い][あ]なので
Sheet1全体を
A B C
1う い あ
2く き か
3す し さ
と並べ替えるというものです
その時桃白白さんに頂いた回答がこちらです
https://friendpaste.com/2SD94Big6C5rrUcyFYuphe
さらにセルに色をつける方法について質問があります
上の状況と同じように[う]を選択した場合にsheet1を並べ替えると同時に
[う][い][あ]の順に濃い色をつけ(赤→ビビッドピンク→パステルピンクのように…)
さらに[う]を選択した場合に2行目に関してはSheet3の関連度を呼び出して
[く]を軸に[く][か][き]の順に濃い色をつけ
3行目も同様に[す]を軸に[す][し]=[さ]の順に濃い色をつける,ということは可能でしょうか
全くの初心者で上のプログラムを一行ずつ調べて理解するのがやっとというレベルです
アドバイスお願いします
0122デフォルトの名無しさん
2012/12/11(火) 08:30:41.33どの行でどのシートを参照するのかはどうやって判断するのですか?
0123デフォルトの名無しさん
2012/12/11(火) 08:59:16.12可能。
アドバイスとしては、>>121の仕様をコードにおこせばOK。
0124デフォルトの名無しさん
2012/12/11(火) 10:52:04.34そういう愚にも付かない事は書かなくてよろしい
0125デフォルトの名無しさん
2012/12/11(火) 12:12:15.100126デフォルトの名無しさん
2012/12/11(火) 12:40:05.31ソースコードの的確な場所にコードを追加するだけ
0127デフォルトの名無しさん
2012/12/11(火) 13:02:39.70何
0128デフォルトの名無しさん
2012/12/11(火) 13:16:19.000129デフォルトの名無しさん
2012/12/11(火) 13:23:36.200130デフォルトの名無しさん
2012/12/11(火) 13:59:25.92ってだけの話
0131デフォルトの名無しさん
2012/12/11(火) 15:34:04.81お前に指図される覚えはない。
0132デフォルトの名無しさん
2012/12/11(火) 16:00:06.06>>121は白桃担当。
蛇足だがそもそも
>例えば,C1[う]を選択したら,Sheet2で[う]をみると関連のある順に[う][い][あ]なので
ここが、5、3、0とか解説がないから意味わからん。
検索もできない、説明もできない、そんな奴を相手に白桃さんは親切だな。登場を待とうじゃないか。
0133デフォルトの名無しさん
2012/12/12(水) 00:00:29.79なんか最近、3×3の9マスのソートのアルゴリズムの研究をどこかで見た気がするんだけど・・・
それ関連?
0134デフォルトの名無しさん
2012/12/12(水) 00:51:31.80うんこにもほどがある
0135デフォルトの名無しさん
2012/12/12(水) 01:19:38.97どの質問に対する回答なの?
まさか>>121宛じゃないよね?
あれはマクロの記憶じゃ無理
0136デフォルトの名無しさん
2012/12/12(水) 05:05:18.94セルに色をつける程度ならできるだろ。
0137デフォルトの名無しさん
2012/12/12(水) 06:52:40.23てかさ、プログラムなんて単純な処理の集合なんだから、それを一つずつクリアして
やりたい処理に組み合わせればいいだけだろ。
単純な処理の部分についてはマクロの記録で充分。
0138桃白白
2012/12/12(水) 07:00:05.20このテンプレって誰が考えたのか知らんけどすてきだなと桃白白思うの。
VBプログラマ質問スレ(Ver.6.0 まで) part60
http://toro.2ch.net/test/read.cgi/tech/1351327234/
>答えられない質問は無駄に罵倒せずスルー。無理するな。
まさにお前のようなやつを諫止するためにあると思うの。お前はまじめなやつなんだと
桃白白思う。答えようと必死になるけど答えられなくてやり場のない苛立ちを
質問者にぶつけてしまう甘えんぼなんだと思う。桃白白はお前の思いを受け止めよう。
なぜならば桃白白は心が広いから。俺のことはパイパイさんと呼べ。
0139デフォルトの名無しさん
2012/12/12(水) 09:07:21.91マジリスペクトっす!
0140デフォルトの名無しさん
2012/12/12(水) 10:00:23.400141デフォルトの名無しさん
2012/12/12(水) 10:16:05.37せっかく白糖をおだててるんだから黙ってろ
014269
2012/12/12(水) 13:55:33.53VBを使ってかなりややこしいことをするのかと思い、具体例を聞かなかったのですが
ふと思い出して検索してみたら、至って簡単な手順でできるのですね
ツールバーに「新しいメニュー」をペースト
さらにそのメニューに「新しいメニュー」をペースとして階層化
そこにマクロを好きなだけ貼り付けていく
条件の入力と、VBの中で細かな分岐みたいなことをしなくても
条件の違う似たようなマクロを必要なだけ作っておいてメニューで選択すればOK
たったこれだけでした
メニューバーに自作マクロをグループ分けして「新しいメニュー」を並べることもできる
VB以前の話しでしたw
0143デフォルトの名無しさん
2012/12/12(水) 14:07:18.430144桃白白
2012/12/13(木) 12:37:08.08おーまーたー
>>121
桃白白実装したから試してみて
friendpaste.com/2HcrMkLVj8VbUfTrZXDCy2
>>139
桃白白、またの名を下の毛タワシ丸と申すみたいな。やめろバカ。
パイパンじゃないパイパイだ。
0145デフォルトの名無しさん
2012/12/13(木) 13:34:59.19If Worksheets("test").Cells(20, 1) = 1 Then
Worksheets("test").Cells(20, 2) = 1
End If
自分で書いたやつだとエラーは出ないのですが上手くいきません
With Worksheets("test")
If .Cells(20, 1) = 1 Then
.Cells(20, 2) = 1
End If
End With
0146デフォルトの名無しさん
2012/12/13(木) 13:40:00.470147デフォルトの名無しさん
2012/12/13(木) 13:49:32.80動くが
シート名とかセル範囲とか確認してみ
0148デフォルトの名無しさん
2012/12/13(木) 13:51:05.870149デフォルトの名無しさん
2012/12/13(木) 13:52:59.09A20が1じゃない可能性もあるな
0150デフォルトの名無しさん
2012/12/13(木) 15:02:02.37単に上手くいかないってだけでなくどう上手くいかないんだよ。それを説明しる
0151デフォルトの名無しさん
2012/12/13(木) 15:26:30.520152デフォルトの名無しさん
2012/12/13(木) 18:32:15.83With hoge
With Foo
処理
End With
End With
0153デフォルトの名無しさん
2012/12/13(木) 19:57:45.590154デフォルトの名無しさん
2012/12/13(木) 21:12:09.91システムメッセージが出ないってことはエラーも何も発生しておらず、正常に動作してるんだろう
0156デフォルトの名無しさん
2012/12/13(木) 21:15:05.610157デフォルトの名無しさん
2012/12/13(木) 21:23:40.440158デフォルトの名無しさん
2012/12/13(木) 21:32:33.050159デフォルトの名無しさん
2012/12/14(金) 16:24:33.22では質問
ツールバーにある「塗りつぶし」ボタン
現在設定の色がボタンに表示されている
ボタンクリックで、指定セルがその色に変わる
ボタン右の▼をクリックすると
カラーパレットの表示された窓が開き、各パレットをクリックすると
指定セルの色が変わる
またパレットの上端をドラッグするとパレット自体をツールバーから切り離して
好きな場所に移動でき、かつ×ボタンで閉じることができる
このパレットに色ではなくてマクロボタンを配置して使いたいと考えたことがあるんだけど
あるワークシートの作業をするときに使用するマクロのグループをパレット上に配置し
作業をするときだけ、パレットを切り離して作業しやすいところに常時表示させて
ダイレクトにマクロボタンを操作できるようにする
使わないときは呼び出しボタン(「塗りつぶし」ボタンみたいなイメージ)だけツールバー上にあり
必要なときにパレットを表示して使う
みたいなことはどうやればできますか?
ツールバーを作れば似たようなことはできますが
0160デフォルトの名無しさん
2012/12/14(金) 16:30:05.450161デフォルトの名無しさん
2012/12/14(金) 22:32:13.78ありがとうございます
これをもとに書き換えてシステム実装していこうと思っているのですが
63行目でアプリケーション定義またはオブジェクト定義のエラーが出てしまいます
その前にもユーザ定義型は定義されていませんと出たのですがツールの参照設定を変更して出なくなりました
0163デフォルトの名無しさん
2012/12/15(土) 05:14:55.86いいこと聞いたw
0164デフォルトの名無しさん
2012/12/16(日) 18:41:27.14VBAでWorksheetFunction.NormSInv(Rnd)を2万回行うと、時折「取得できませんでした」というエラーで止まります
普通に2万回計算を終えて終了することもあります
エクセルシート上で関数=normsinv(rand())を計算し、値で別シートに貼り付けて保存する
再計算を行って2万回これを繰り返すというマクロにすると、今のところ一度もNUM!という結果が現れていません
VBAのWorksheetFunction.NormSInv(Rnd)がエラーで時折停止する理由を教えていただけないでしょうか
ランダム数で0を取得してしまい、NORMINV(0)=NUM!と同じことになっているのだろうと現在推測しているのですが
そうするとエクセルシート上で=normsinv(rand())を行っても同じ頻度でNUM!が結果に出ていてもいいと思われるので
根本的にマクロを間違っているのでしょうか
それともVBAのRndとエクセルシート上で使うRand()は別のものなのでしょうか
どうぞよろしくお願いします
0165デフォルトの名無しさん
2012/12/16(日) 18:52:24.700166デフォルトの名無しさん
2012/12/16(日) 18:53:34.04何が質問?
0167デフォルトの名無しさん
2012/12/16(日) 19:02:24.59別物と言えば別物ではあるけど、ヘルプを見る限り、どちらも0以上1未満の数値を返す
つまりどっちにしても0でエラーになる可能性はあるわけで、単に確率の問題だと思われ
ヘルプに反してRandがゼロを返さない可能性も無いではないが
0168デフォルトの名無しさん
2012/12/16(日) 19:18:09.58windows7、office2007です
>>165
仕事の関係で、数万回のシミュレーションが必要だと言われています
>>166
・VBAにおいてWorksheetFunction.NormSInv(Rnd)が「取得できませんでした」とエラーで停止する理由
(再現性はあるが常に停止するわけではない)
・VBAのRndとエクセルシート上で使用するRAND()は完全に同じものか
この2点が質問となります
わかりにくい表現となり申し訳ございません
>>167
ありがとうございます
私も確率の問題が一番可能性があるとは思っているのですが、その割には頻度に差があるので気になっています
早速エラーで止まりました
エラーメッセージは以下となります
http://ux.getuploader.com/7riyuma/download/21/%E3%82%A8%E3%83%A9%E3%83%BC%E8%A1%A8%E7%A4%BA.xlsx
今回は6800回を超えたくらいでこのエラーで停止しました
0169デフォルトの名無しさん
2012/12/16(日) 19:32:59.77エラーで止まるとかよりrndで0が返るか確認すればいいのにとおもた
0170デフォルトの名無しさん
2012/12/16(日) 19:35:16.42その通りですね
Rndをひたすら繰り返してみます
ありがとうございます
0171デフォルトの名無しさん
2012/12/16(日) 19:39:51.41乱数つかって再現性とか...シード指定しろよ
>VBAにおいてWorksheetFunction.NormSInv(Rnd)が「取得できませんでした」とエラーで停止する理由
Rndがゼロを返すから
>VBAのRndとエクセルシート上で使用するRAND()は完全に同じものか
完全に同じものではない
0172デフォルトの名無しさん
2012/12/16(日) 20:08:02.63ありがとうざいます
シードについて、まずは勉強していきます
不勉強で申し訳ございませんでした
0173デフォルトの名無しさん
2012/12/16(日) 20:44:01.42頻度に差があるので気になっていますって
2万回なら頻度に差が出て当然だと思う
Excelの問題じゃない
0174デフォルトの名無しさん
2012/12/16(日) 21:11:22.45項目A 100
項目B 50
項目C 2
という値が入っています。項目A÷項目Bで、項目Cは「2」になります。
しかし、項目Aに50,項目Bに100が入ることがあります。
その場合、項目A÷項目Bをすると0.5となりますが、これを「-2」と表現したいです。
VBAの数式で、IF文を使わず、-2とできる方法がありますでしょうか。
0175デフォルトの名無しさん
2012/12/16(日) 21:14:29.12法則がわからない
分数の分母にマイナスを付ければいいの?
0176デフォルトの名無しさん
2012/12/16(日) 21:17:21.36AとBは50/100か100/50の2通りだけ?
0177デフォルトの名無しさん
2012/12/16(日) 21:18:53.55普通にやると、項目Cのセルに、
IF(A1>A2,A1/A2,-(A1/A2))
とやればいいんですが、なんかスマートじゃないなぁと思いまして。
項目A,Bにはいろんな数字が来ます。ただし、A÷Bの順番は変えられません。
他にパッとするやり方があれば教えていただければ助かります。
0178デフォルトの名無しさん
2012/12/16(日) 21:26:24.170179デフォルトの名無しさん
2012/12/16(日) 21:29:23.95VBAにIF演算子はないと思うぞ
0180デフォルトの名無しさん
2012/12/16(日) 21:54:04.85その式だとA1に50、A2に100が入っていた場合、-2じゃなくて-0.5になると思うけど、
本当にやりたいことはなんなの?
0181デフォルトの名無しさん
2012/12/17(月) 08:50:23.90の間違いでしょ。それよりVBAなのかそうじゃないのかどっちよ
IFを使わずに書くこともできるけど、たぶんかえって長くなると思う
0182デフォルトの名無しさん
2012/12/17(月) 10:27:31.920183デフォルトの名無しさん
2012/12/17(月) 11:12:51.70ただし、A÷Bの順番は変えられません。
0184デフォルトの名無しさん
2012/12/17(月) 12:54:23.480186デフォルトの名無しさん
2012/12/17(月) 13:49:55.56買えば?
0187デフォルトの名無しさん
2012/12/17(月) 14:38:07.730188デフォルトの名無しさん
2012/12/18(火) 13:21:48.54度々すみません
すべての行に対してソートを行うにはどこを書き換えれば良いでしょうか
色無し(121のリンク先)の時はコードを書き換えてすべての行を自由に選択→そこを軸にソートができたのですが
色がついたとたんに理解力が及ばなくなってしまいました…
0189桃白白
2012/12/18(火) 13:32:17.62これの92行目のsh1.Range("A1:C3")のとこ。
https://friendpaste.com/2HcrMkLVj8VbUfTrZXDCy2
0190デフォルトの名無しさん
2012/12/18(火) 14:08:24.34選択範囲は変わらない気がするのですが…
0191デフォルトの名無しさん
2012/12/18(火) 16:38:06.10ごめんなさい,もう少しヒントを頂きたいです
実際に組んでるものはSheet1のA1:AG27にデータが入っていて,その内のCからAGの31件をソートしたいと思っています
選択できる範囲はそれぞれの9〜21列目,つまりC9:AG21です
なので以下のように直しましたがエラーが出てしまいます
29行目をWorksheets(rowNum - 7)←9行目選択でSheet2〜21行目選択でSheet14を参照するため
37行目Range("B1:AF1")←31件分
43行目Range("A2:AF32")←Sheet2以降のデータ入ってる31件分
92行目Range("C1:AG27")←Sheet1の中でソートで動かす範囲全部
エラーは実行時エラー9「インデックスが有効範囲にありません」です
どこか変更したりないのだと思いますがじっくり見ていってもどこだかわかりません
よろしくお願いします
0192デフォルトの名無しさん
2012/12/18(火) 16:39:26.41書き忘れました
エラーが出るのは29行目の
Set GetSheet = Excel.Worksheets(rowNum - 7)
で調べたらrowNum=1になってしまっています
0193桃白白
2012/12/18(火) 17:43:06.32ぇ・・・なんでだろ。C9:AG21の範囲でどれかひとつのセルが選択されると。
9行目から21行目に対応する関連度が書かれたシートがあると。
そうすると問題はカラーリングのところかしら。いまはソートされたところ
全部の関連度を引っ張ってきてそれを元に色付けするようになってる。
ソートする範囲と色付けする範囲が違ってたりしちゃうわけ?
まあまずはあれだな、原因を特定しなきゃいけないな。
' Coloring以降のコードをごっそり削除しても例外でる?
0194デフォルトの名無しさん
2012/12/18(火) 17:49:57.2797〜114行目を削除したらエラーは出ませんでしたがマクロは実行されていませんとなりました
0195桃白白
2012/12/18(火) 18:10:16.66ん?どゆこと?マクロが実行されなかった?
94行目は間違ってた。1をrowNumにして。
Call Sort(v, rowNum, GetRels(rowNum, char1))
色づけする範囲はC9:AG21?
0196デフォルトの名無しさん
2012/12/18(火) 18:15:37.87ありがとうございます結婚してください
色付けの範囲はC9:AG21です
マクロの実行は私の勘違いでした(マクロの記録は現在行われておりませんの見間違い)
94行目を直して97〜114行目を削除したところ,色なしでのソートがうまくいきました
そのまま実行すると「インデックスが有効範囲にありません。(Error 9)」です
0197デフォルトの名無しさん
2012/12/18(火) 18:20:53.880198デフォルトの名無しさん
2012/12/18(火) 18:23:49.91読まずにスルーすればいいんだよ
0199デフォルトの名無しさん
2012/12/18(火) 18:30:35.76今後馴れ合いしなければ
0200デフォルトの名無しさん
2012/12/18(火) 18:48:31.96Coloring削除しても少しソートがうまくいかない部分がありました
ソートのみで間違いなく動くプログラムがこれです
friendpaste.com/21WFtusmIesUcgQ8eqvUpC
スレ汚しごめんなさい スレチでしたら誘導願います
0201デフォルトの名無しさん
2012/12/18(火) 18:57:23.87スレ汚しごめんなさいって確信犯なのかよ…
やさしいから誘導してあげるよ
http://www.lancers.jp/
0202デフォルトの名無しさん
2012/12/18(火) 19:08:24.460203桃白白
2012/12/18(火) 19:15:43.20つまらないものですがといって粗品と書かれた品物を渡されたら怒り狂うタイプ?
謙遜の心を知らずして日本で生きていくのはさぞかしつらいだろう。桃白白の手元に
バールのようなものがあったなら仁恵あふれる桃白白がお前の胸部に慈悲深い一撃をくれてやりたい。
0204デフォルトの名無しさん
2012/12/18(火) 20:14:36.440205デフォルトの名無しさん
2012/12/18(火) 20:27:00.320206デフォルトの名無しさん
2012/12/18(火) 20:39:39.13おまえもナー
0207デフォルトの名無しさん
2012/12/18(火) 20:50:43.710208デフォルトの名無しさん
2012/12/18(火) 22:12:49.04殺すぞって言ってるようだが気持ち悪くないのか?
気持ち悪いだろ。キチガイと言っていいレベル。
0209デフォルトの名無しさん
2012/12/18(火) 22:28:14.49http://engawa.2ch.net/test/read.cgi/poverty/1355832436/l50
お前らvba版つくってくれ
0210デフォルトの名無しさん
2012/12/18(火) 22:43:32.40パンパンさん通報しました
0211桃白白
2012/12/19(水) 13:29:09.45関連度の参照の仕方が違うみたいだな。
前のやつは縦を検索して横を参照してたけど、
今のやつは横を検索して縦を参照してる。
>>207
これでどう?
https://friendpaste.com/21WFtusmIesUcgQ8erCnEa
>>210
パンパンってなんかあのときのあれみたいだよな、いやらしい、桃白白はそんなお前を軽蔑しちゃう。
0212デフォルトの名無しさん
2012/12/19(水) 13:36:24.25いいこと聞いたw
0213デフォルトの名無しさん
2012/12/19(水) 14:58:10.20あーゆーやつで、道(タオ・ハンタの念とか、ドラゴンボールの気みたいなやつ)の使い手にパンパンっていたんだよ
パンダだからパンパン。
卑猥とかあのときのあれとか
パンパンかパイパンかどっちかにしなさいよ!
0214デフォルトの名無しさん
2012/12/19(水) 15:49:38.56白桃桃という人はOfficeTANAKAみたいに
ExcelVBAの世界ではそこそこ有名な人なんでしょうか?
0215デフォルトの名無しさん
2012/12/19(水) 17:18:31.520216デフォルトの名無しさん
2012/12/19(水) 17:22:53.02オブジェクト名以外に、一つ目のImage、二つ目のImageというような
数値で指定する方法って無いんでしょうか
シートやセル範囲だと、sheets(2)とかcells(1,2)というふうに数値で指定できますよね。
しょうもない質問でしょうがどなたかお願いします
0217デフォルトの名無しさん
2012/12/19(水) 17:32:33.36excel.pictures
0218デフォルトの名無しさん
2012/12/19(水) 17:48:35.50.Shapes
0219デフォルトの名無しさん
2012/12/19(水) 17:53:50.09レスありがとうございます
まだ、そのワードで調べてる途中で理解できていませんが
時間かかりそうなので、ひとまずお礼だけ言っておきます。
0220デフォルトの名無しさん
2012/12/19(水) 21:06:10.16マクロ実行時以外ではマクロ関数が算出しないようにする方法があれば教えてください。
ワークシート関数に無い機能が欲しくて、マクロ関数を作ってあります。
マクロ修正のためVisualBasicEditorを開いたままの状態でシートのセル値を変更します。
すると、マクロ関数が機能し延々と算出し始めます。
マクロ修正中はマクロ関数が機能しなくてもいいので、止められるなら止めておきたいです。
0221デフォルトの名無しさん
2012/12/19(水) 21:48:29.92マクロが動く条件何にしてるの?
特定のセルに入力したら、とかアクティブセルを変えたら、とか
発動条件自分で書いてるはずだけど、
それをボタンを押したら、とかに変えればいいじゃん。
あるいは手間を惜しまないなら、発動する部分を毎回コメントアウトする。
0222デフォルトの名無しさん
2012/12/19(水) 21:55:11.37例えばDebugとかCodingとかの名前でパブリックでスタティックな変数を用意して
対象のマクロ関数でGet、別途Setプロシージャを用意するとか
0223デフォルトの名無しさん
2012/12/19(水) 23:07:34.850224デフォルトの名無しさん
2012/12/20(木) 05:05:16.59パンパンといったらこれを連想してしまうんだが、
今の人は知らないんだろうね
http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%B3%E3%83%91%E3%83%B3
0225デフォルトの名無しさん
2012/12/20(木) 08:42:29.16北京五輪だったか
0226デフォルトの名無しさん
2012/12/20(木) 10:29:53.28その文字列の順序を変数から指定するにはどうしたらいいですか?
(この質問は中級者以上じゃないと言ってる意味がわからないかもしれませんが)
0227デフォルトの名無しさん
2012/12/20(木) 10:34:34.170228デフォルトの名無しさん
2012/12/20(木) 12:21:56.95あれはもう何年も前、いいえ2日前のことです。桃白白はぐりとぐらが作った特大の
カステラが食べたいと思いながら眠りにつきました。夜中にふと目が覚めました。
あたりが昼間のように明るいのです。体があたたかくてやわらかい黄色い光りに
つつまれていました。そうカステラと一体化したのです。それいらい桃白白は
エスパー能力を身につけました。
ユーザー定義といったらType。
>>226は一字一句間違いなくこう書いている。
Type Castella
Guri As String
Gura As String
End Type
0229デフォルトの名無しさん
2012/12/20(木) 15:11:40.70Type で定義してんのかあれ
参考にさせてもらおう
0230デフォルトの名無しさん
2012/12/20(木) 15:31:11.84カスタムリストのidゲットして、add customlist=arr(文字列)
並べ替えのときにordercustom:=カスタムリストのid
でいいんじゃないか
構造体とか使うのか
0231デフォルトの名無しさん
2012/12/20(木) 15:35:50.26TYPE とかソートなんて初心者みたいな質問するわけないだろ
調べれば出てくるような、そんなレベルの低い答えばわけないだろ
0232デフォルトの名無しさん
2012/12/21(金) 11:45:16.470233デフォルトの名無しさん
2012/12/22(土) 22:09:18.76どっかで循環してんのか?
確かにデータは5万近くあるが
0234デフォルトの名無しさん
2012/12/22(土) 22:43:15.590235デフォルトの名無しさん
2012/12/22(土) 23:04:44.32五年前のXPノートでも3秒かそこらだろう
どんなコード?
0236デフォルトの名無しさん
2012/12/22(土) 23:22:39.120237デフォルトの名無しさん
2012/12/23(日) 01:21:41.290238デフォルトの名無しさん
2012/12/23(日) 01:30:04.90レコードの追加に合わせて印刷範囲を随時拡げていくという処理を入れたらふじこふじこ
レコードの追加の完了後に印刷範囲を拡げるという処理にしたらシャキィーン!だった。
つまり何が言いたいかって言うとさ、印刷範囲を随時拡げていくという処理は重いって事だよ。
0239デフォルトの名無しさん
2012/12/23(日) 01:55:57.67なんのために随時広げる必要があったんだ?
0240デフォルトの名無しさん
2012/12/23(日) 02:02:49.76最初のうちは複数回呼ばれることを想定してなかったからメソッドを分けてなかった
0242デフォルトの名無しさん
2012/12/23(日) 02:08:56.91そうそう、よくあることなんだよね。
>>239
いやほら、なんかかっこいいじゃん。
>>241
みすった、すみませんこれなしで。
0243デフォルトの名無しさん
2012/12/23(日) 09:00:39.04Unionとか使うと平気で3時間とかはかかるけど
0244デフォルトの名無しさん
2012/12/23(日) 12:09:25.55エクセルシートにダウンロードしてるんだけど、全て終わるまでに30分くらいかかる。
どうにかして速くする方法ない?
データを配列に入れて、rangeオブジェクトに張るの試したけどあんま変わらなかった。
0245デフォルトの名無しさん
2012/12/23(日) 12:18:36.85おれも似たようなことやってるけど、
約1000銘柄200日分で20万行の処理に
20分くらいしかかかってないぞ。
0246デフォルトの名無しさん
2012/12/23(日) 12:29:50.45速くする方法どころか、速くできるか否かすら解んねーよw
まあそんなことにも気付かず不適切な質問しちゃうくらい頭の弱い子なわけだから
改善の余地がありまくりなのは間違いないだろうがな
因みに、ダウンロードに時間が掛かってるなら、むしろそれは改善可能でも改善すべきじゃない
広告を見てくれることを前提に無料で提供してくれているデータを、広告も見ずにぶっこ抜きしてる時点で
「大変申し訳ない」「時間が掛かろうと無料で得られるだけで非常にありがたい」という態度で居るべきなのに
それを相手先の鯖負荷も考えずに、身勝手な自己都合だけで高速化(=鯖の高負荷化)するなんてのは
技術的に可能でも、人としてやるべきではないからね
0247デフォルトの名無しさん
2012/12/23(日) 12:47:48.38とりあえずコード晒せ
回線や鯖の問題でなければいくらでも高速化できる
その結果アク禁や有料化されても俺は知らんけどな
0248デフォルトの名無しさん
2012/12/23(日) 14:46:21.97使い方や注意点をすべて教えていただけませんか?
ちなみにまだ使ったことのない初心者ですのでそこを考慮願います。
0249デフォルトの名無しさん
2012/12/23(日) 14:49:19.40別にないよ
Variant型以外の配列と同様に扱えばよし
0250248
2012/12/23(日) 15:52:46.50どういうとき( )を書かなくていいとか書くべきとか
いろいろ注意点はあるはずだ。
0251デフォルトの名無しさん
2012/12/23(日) 16:23:30.950252桃白白
2012/12/23(日) 16:26:56.43ないよ。いつからあるって錯覚してた?ないよ。そんなの。
徳川の埋蔵金みたいなもんだろ。あると夢を見続ける人は
絶えない。そう思わせることに価値があるのかもしれないな。
桃白白はしんみりとそう思う。
0253デフォルトの名無しさん
2012/12/23(日) 18:28:40.970254デフォルトの名無しさん
2012/12/23(日) 18:36:07.16更に上限・下限を指定した場合、それに一致する配列のみが代入できる。
代入できるものに制限を付けるかどうかだけの違いで、使う分には全く変わらない。
0255デフォルトの名無しさん
2012/12/23(日) 18:36:29.270256248
2012/12/23(日) 19:01:30.70ありがちょう。
こういうレスがほしかったです。
すこし賢くなりました。
しかし悲しいかな「知れば知るほど、分からないことが増える」というニュースの池上の名言のように
()のみは1次元となるのか
( , )とコンマだけ入れると上限下限の2次元となり、ほんとうに例えば test(500,1000)みたいな大きな数も自由に代入できるのか
VBAでフィルターかけるときのCriteriaでこのVariant変数が使えるのは1次元のときのみなのか
その他いろいろ
さらに不明点が倍増しました。
0257デフォルトの名無しさん
2012/12/23(日) 19:01:33.81>Variant型変数を配列で使う場合
じゃなくて
Variant型変数で配列を使う場合
というべきじゃね?
Variant型変数にrangeを代入すると
変数の中身は配列になるけど()は付けないよね。
んで、配列の中の要素をいじるときには()使うけど、
そういう話かな?
0258桃白白
2012/12/23(日) 19:10:04.010259248
2012/12/23(日) 19:10:30.20はい、そういう話です。
Variantという自由なものをつくったばっかりに
いろんな場合が想定できるので逆にコード書く人にとっては把握事項が増えて実に使いにくいものとなった例だと思うんです。
0260デフォルトの名無しさん
2012/12/23(日) 20:00:36.24型が曖昧でも適当に動くようにする方針で設計されていたからなあ。
ある程度型宣言が可能なVBAで違和感を覚えるのは、しようがないところか。
JavaScript位吹っ切れていれば全く気にならなくなるのだけどw
0261デフォルトの名無しさん
2012/12/24(月) 00:08:29.24>Variant型変数にrangeを代入すると
>変数の中身は配列になるけど()は付けないよね。
それもちょっと違う
Variant以外でも配列全体に代入するときは括弧は付けないから、
それはVariant型で配列を使うときの注意点じゃない
Dim b() As String
b = Split("a,b,c", ",")
MsgBox b(0)
0262デフォルトの名無しさん
2012/12/24(月) 00:15:41.810263デフォルトの名無しさん
2012/12/24(月) 02:14:06.960264デフォルトの名無しさん
2012/12/24(月) 02:21:23.100265デフォルトの名無しさん
2012/12/24(月) 07:28:36.70宣言で括弧つけてる(=動的配列変数として宣言してる)じゃん
Variant型だとそんなのお構いなし
0266デフォルトの名無しさん
2012/12/24(月) 10:49:48.02http://toro.2ch.net/test/read.cgi/tech/1342087380/
0267デフォルトの名無しさん
2012/12/24(月) 11:19:16.820268デフォルトの名無しさん
2012/12/24(月) 14:29:45.74VBAProject
- 標準モジュール
+ FilesCommon
- クラスモジュール
+ Files
+ TreeFiles
+ ListFiles
みたいになってるときに、
[TreeFiles]
Implements Files
' 〜
[ListFiles]
Implements Files
' 〜
[FilesCommon]
Sub ShowList(ListType As String)
Dim Files As Files
Set Files = CreateObject(ListType)
' Filesを使ったリスト化処理
End sub
てな感じにして、クラスモジュールの追加と呼び出し文字列(ListType)の変更だけで
挙動を変えたい(ListType の Select Case を作ってそこもメンテさせるってのはちと不味い)のだが、良い方法ないもんかな
0269268
2012/12/24(月) 14:31:35.93Appication.EvaluateやCallByNameはNewできないし、
Vbs.Evalじゃプロジェクト内部のクラスモジュールまではあずかり知りません、だし、
うまく解決するすべがないものかと・・・。
0270デフォルトの名無しさん
2012/12/24(月) 14:35:34.50>>2
0272デフォルトの名無しさん
2012/12/24(月) 15:35:10.75人が少ないスレに行く意味がわからん。
自分で建てたけど使われないからってみっともなw
0273デフォルトの名無しさん
2012/12/24(月) 16:41:45.850274デフォルトの名無しさん
2012/12/24(月) 17:37:17.22Application.screenUpdatingだっけ?入れてる?
0275デフォルトの名無しさん
2012/12/24(月) 19:20:37.69入れてました。若干速くなる気もするけど、せいぜい2分位です。
その間、セルに貼り付けてる過程が見れないので、2分短縮するくらいなら外した方がいいと思って
今は外してます。
ソースは本当にシンプルなので、問題があるとすればサイトへのアクセスの仕方かなぁ・・・
0276デフォルトの名無しさん
2012/12/24(月) 19:22:48.72プロファイラ使えよ
0277デフォルトの名無しさん
2012/12/24(月) 20:26:44.98他の人も言ってるけどソース見せてくれないの?
ソース見ないことには判断出来ないっすよ
0278デフォルトの名無しさん
2012/12/25(火) 11:48:35.69それ、普通は
sub ShowList(byref obj as Files)
'objを使ったリスト化処理
end sub
sub foo()
showlist new TreeFiles
showlist new ListFiles
end sub
みたいにやるんだけど、なんでそうしないの?
0279デフォルトの名無しさん
2012/12/25(火) 15:10:16.71おい!ソース見せろや!おい!
指摘できんやろが!
0280デフォルトの名無しさん
2012/12/25(火) 22:59:11.70kwsk
>>277,279
Set oHttp = CreateObject("MSXML2.XMLHTTP")
For r = 2 To Range("A" & Rows.Count).End(xlUp).Row 'A列にある4桁の銘柄コードの総数取得
' If (Cells(r, 1) >= 1000 And Cells(r, 1) <= 9999) Then 'A列に4桁の銘柄コードがあったら処理開始
With oHttp
strURL = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=" & Cells(r, 1)
.Open "GET", strURL, False
.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
.Send
(以降、HPから引っ張ってきたテキストを元に、銘柄名や市場名をセルに書き込み)
End With
End If
Next
こんな感じでほんとにふつーのやり方です。
If文内の、セルに書き込む処理や、HPからデータ持ってくる部分を
全部コメントアウトしても20分位かかるんで、If文の中の処理が問題という訳ではないです。
何が悪いんだ・・・
0281デフォルトの名無しさん
2012/12/25(火) 23:54:35.850282デフォルトの名無しさん
2012/12/26(水) 00:03:28.66図書館を対象にした処理ではなく、別の目的のテストとして図書館を対象に処理してたんだっけ。
公共なのに糞サバなのが悪いだろアフォかとかいう意見もあったっけ。
Yahooなら個人が何をしても問題になんてならないと思うけど。
>>280
IF文内の以下略じゃなくて単にFor文の問題って言いたい。でいいのかな。
oHTTPも全然関係ないと。
0283デフォルトの名無しさん
2012/12/26(水) 00:39:09.50裁判でちゃんと無罪になってる
最近のなりすまし誤認逮捕以上に恥ずかしい事件だったんで、結末もひっそりとしか報道されなかった
おかげで、いまだに連続アクセスすると逮捕されるとか寝言を言うバカ>>281がいる
0284デフォルトの名無しさん
2012/12/26(水) 01:03:02.700285デフォルトの名無しさん
2012/12/26(水) 01:24:17.46逮捕されてるじゃん
0286桃白白
2012/12/26(水) 02:03:06.78通信速度の限界じゃね。
桃白白のFirefoxでこれにアクセスしたら送信から受信まで平均0.5秒だった。
http://stocks.finance.yahoo.co.jp/stocks/detail/?code=1000
20分だと2400件取得できる。まあそんなもんだろ。
非同期でリクエスト送りまくっちゃったらすこし速くなるだろうけど、
まああんま変わんないんじゃね。仕方ないんじゃね。桃白白そう思うんじゃね。
0287デフォルトの名無しさん
2012/12/26(水) 02:59:59.35YAHOOの鯖が遅いだけだね
平均すると1ページあたり0.3秒ぐらいかかってる
公開されてるのは3439銘柄だから、単純計算で15分以上かかることになる
試しに非同期でやってみたら2分で終わったけど、やるなら自己責任でね
それよりも、株価を公開してるサイトはたくさんあるから、もっと軽いサイトを探した方がいいかも
あと、何度か走らせたらガベージコレクションが始まってプチフリしたんで、
オブジェクトは1回ずつ解放した方がいい
Set…Nothingをループの中に入れてもスピードはほとんど変わらんかった
0288デフォルトの名無しさん
2012/12/26(水) 07:39:34.21ありがとう!やっぱこんなもんなのか速度的には。
非同期ってのを頑張ってやってみようか・・・
プチフリは自分もたまにある。これが頻発すると下手すると40分してたんだよ(´Д`)ハァ…
オブジェクトの開放の仕方変えてみまつ。
0289デフォルトの名無しさん
2012/12/26(水) 10:27:11.00> 全部コメントアウトしても20分位かかるんで
なんでこんな嘘をつく必要があったんだ・・・
0290デフォルトの名無しさん
2012/12/26(水) 15:30:44.8416日目以降はB1からB15までといったように空欄に記入していたとします
このとき最後に記入した値を拾いたいのですがどのように書けばよいのでしょうか?
0291デフォルトの名無しさん
2012/12/26(水) 15:45:06.45だけど適当でいいなら、ワークシートチェンジだかなんだかでセルアドレス、内容をどっかに保存
それを読み出すのが楽
0292デフォルトの名無しさん
2012/12/26(水) 16:24:07.14For c = 1 To 2
For r = 1 To 15
If Cells(r, c) <> "" Then n = Cells(r, c)
Next
Next
Debug.Print n
0293デフォルトの名無しさん
2012/12/29(土) 10:54:41.57end2回
0294デフォルトの名無しさん
2012/12/29(土) 11:04:52.98欄外に注意書きとかあったらそっち拾ってくる可能性があるだろ
ほんと粗悪品だなお前
0295デフォルトの名無しさん
2012/12/29(土) 11:14:42.890296デフォルトの名無しさん
2012/12/29(土) 11:38:54.56ユーザが1セル書き漏らしたり、隣にメモ書きしたりしただけで
正常に動作しなくなるツール群を修正中。
0297デフォルトの名無しさん
2012/12/29(土) 13:05:45.28基本的にダメ社員は保守作業をさせられるもんだよ
我慢して働いてればその内いいこともあるさ
頑張れ!
0298デフォルトの名無しさん
2012/12/29(土) 13:33:55.660299桃白白
2012/12/29(土) 13:40:27.550300デフォルトの名無しさん
2012/12/29(土) 22:07:37.840301デフォルトの名無しさん
2013/01/01(火) 11:34:22.80簡単なゲームを作りたいんだが
「キー入力」はどうコードで実現させますか?
0302MADOKA MAGICA
2013/01/01(火) 12:27:58.910303デフォルトの名無しさん
2013/01/01(火) 13:00:36.72リアルタイムキー入力のことなら
VBA自体にはその機能がない。
Windowsの機能を呼び出して使うことになるので
ここから先はスレ違いとなる。
「VBA キー入力」あたりのキーワードでググってみれ。
0304デフォルトの名無しさん
2013/01/01(火) 17:39:51.82※「Hnn(年度)」…平成(nn-1)年4月〜平成nn年3月
※「中之島」「渡辺橋」「大江橋」「なにわ橋」…「H21」10月の[総数]は日割り(13/31日) 。
※「大阪難波」「桜川」「ドーム前」「九条」…「H21」3月の[総数]は日割り(12/31日) 。
※「総数」…「H18」の7月以降及び年度平均はOTS線を除いた数値となっている。
※『「6−2 大阪市内の私鉄各駅の乗車人員」の平成19年11月分掲載数値の一部に誤りが
ありましたので、赤字にて訂正いたします。(2012年12月6日)』の反映。
平成23年4月〜平成24年10月
http://www.city.osaka.lg.jp/keikakuchosei/page/0000020916.html
[2012年12月18日]
http://www.city.osaka.lg.jp/keikakuchosei/cmsfiles/contents/0000020/20916/6-2.xls
平成23年3月〜平成13年4月
http://www.city.osaka.lg.jp/keikakuchosei/page/0000164566.html
[2012年4月18日]
http://www.city.osaka.lg.jp/keikakuchosei/cmsfiles/contents/0000164/164566/12-8.xls
0305デフォルトの名無しさん
2013/01/01(火) 17:58:17.47xls形式っていうだけで身構えてしまう。
0306デフォルトの名無しさん
2013/01/01(火) 20:02:28.11ワークシート関数のCOUNTIFで配列を調べる事は出来ますか?
Dim c As Variant
c = Range("A1:C10000")
cnt = WorksheetFunction.CountIf(Range(c(1, 1), c(3, 1000)), "1")
これはエラーになります。
0307デフォルトの名無しさん
2013/01/01(火) 20:16:35.25COUNTIFの引数はRange型っぽいからできないけど、何がしたいんだ?
エスパーしてみると
Dim c As Range
Set c = Range("A1:C10000")
cnt = WorksheetFunction.CountIf(c, "1")
こういうことか?
0308デフォルトの名無しさん
2013/01/01(火) 20:26:44.73COUNTIF(範囲,検索条件)
だから、引数1個多いんでないの
0309デフォルトの名無しさん
2013/01/01(火) 21:00:42.55だから引数は多くないだろ
ただ、なにがしたいかわからん
0310デフォルトの名無しさん
2013/01/01(火) 21:19:23.13やりたい事記述したら?
それでエラーがでない且つ出力結果が望む形になるようになれば
変数に置き換えてもうまくいくはずだが
0311306
2013/01/01(火) 21:24:09.89Setを付けたらエラー無く数えられました。
ただある範囲を調べたいので
cnt = WorksheetFunction.CountIf(Range(c(1, 1), c(3, 1000)), "1")
とかすると、エラーは出ないけど少なすぎる数字になります。
1は何千もあるはずなのに3とかになります。
範囲の指定のしかたがおかしいですか。
0312デフォルトの名無しさん
2013/01/01(火) 21:27:33.47cは変数ていうか配列の名前のつもりなんです。
0313デフォルトの名無しさん
2013/01/01(火) 21:33:57.96列と行の指定が変だから、皆突っ込んでいるのだと思うよ。
Range("A1:C10000") は3列10000行の範囲だけど、
その後の Range(c(1, 1), c(3, 1000)) は1000列3行の範囲になっている。
0314デフォルトの名無しさん
2013/01/01(火) 21:38:02.25↓↓↓ x1000
Cells(1,1):Cells(3,1000)は
→
→
→
x1000
こうだな
0315デフォルトの名無しさん
2013/01/01(火) 21:41:51.90え、そうなんですか
自分では1行1列目から3行1000列目のつもりでした。
0316306
2013/01/01(火) 21:43:54.26今まで作ったの全部見直さなきゃなんない。
0318デフォルトの名無しさん
2013/01/01(火) 22:25:59.68>Range(c(1, 1), c(3, 1000)) は1000列3行の範囲になっている
なってないぞ
c(1,1)の値(=A1セルの値)の行数とc(3,1000)の値(=どっかのセルの値)の列数だ
Range(Cells(1, 1), Cells(3, 1000))と勘違いしてないか?
0319306
2013/01/01(火) 23:25:07.99自分勘違いしてました。ちゃんと動いてました。
>>307さんの通りSet付けたらもう完成でした。
Dim c As Range
Set c = Range("A1:C10000")
cnt = WorksheetFunction.CountIf(Range(c(1, 1), c(3, 1000)), "1")
これで配列の1行1列目から3行1000列目がちゃんと数えられてました
1が3個しか無いのを少ないと思ったけど1行に1個なので3個でよかったんです。
なんかすみませんでした。
0320デフォルトの名無しさん
2013/01/01(火) 23:51:17.100321デフォルトの名無しさん
2013/01/02(水) 00:34:03.570322デフォルトの名無しさん
2013/01/02(水) 01:25:36.040323デフォルトの名無しさん
2013/01/02(水) 01:57:18.12CellRange、CellArray、つまりcでも別におかしくはない
つーか配列はaって方が違和感あるな
プレフィックスとしてaを付加するってなら解らなくもないが
1文字で表現するなら「配列であること」より「何の」配列かの方が重要な要素なんだから
配列だからaってのは浅慮に過ぎる
0324デフォルトの名無しさん
2013/01/02(水) 02:11:26.59確かにセルならcか。rangeだからrでもいいか。
どうでもいいけど一言余分な人ってリアルでも一言余分なのかな。詳しく。
0325デフォルトの名無しさん
2013/01/02(水) 03:01:35.34それ言うんならcじゃなくてcrかcaでしょ?
cだけじゃaより意味通んない。
0326デフォルトの名無しさん
2013/01/02(水) 05:22:52.66> どうでもいいけど一言余分な人ってリアルでも一言余分なのかな。詳しく。
リアルでもそうだよ。
人はなかなか変われないからね。
0328デフォルトの名無しさん
2013/01/02(水) 08:24:07.010329デフォルトの名無しさん
2013/01/02(水) 08:34:39.95Rangeのまま処理したいのですがどうすればいいですか?
Sub Test()
Dim rng As Range
Dim list As New Collection
Set rng = Range("A1:B2")
list.Add (rng)
Debug.Print (TypeName(rng))
Debug.Print (TypeName(list(1)))
End Sub
-- 結果 --
Range
Variant()
0331デフォルトの名無しさん
2013/01/02(水) 08:51:57.36Collectionは何でも突っ込めるようにするため型をVariantにして抽象化している
0332デフォルトの名無しさん
2013/01/02(水) 13:40:51.82Variant型ならキャストしてRangeとして扱えそうなんですが
ご丁寧にセルごとのValueが入ったVariant配列に分割されてしまってるみたいです
いろいろこねくり回したんですがRangeとして取り出せませんでした
>>330
構造体はちょっと大げさなので今回は動的配列にしようと思います
お手数おかけしました
0333デフォルトの名無しさん
2013/01/02(水) 15:42:15.57>ご丁寧にセルごとのValueが入ったVariant配列に分割されてしまってるみたいです
なにをしたいのか知らないが list.Add (rng) ならRange処理結果だから当然だろ
RangeのままCollectionに放り込みたいのなら list.Add rng
0334デフォルトの名無しさん
2013/01/02(水) 15:52:56.10違う
>>329,332
list.Add (rng) はlist.Add (rng.Value)として解釈されてる
コレクションに追加するなら
list.Add (rng.Cells)
取り出すときは
Set rng2 = list(1)
Range型は特殊な動きするから直接取り扱わん方がいいかもね
0335334
2013/01/02(水) 16:02:01.44つまり
Call list.Add(rng)
Call list.Add((rng))
との違いで下は(rng)が評価されてValueがセットされてる
(ホントはValueじゃなくてデフォルトプロパティだけど)
0336デフォルトの名無しさん
2013/01/02(水) 16:14:21.31引数有りならともかく、無しの時の挙動がかなりキモい。
0337デフォルトの名無しさん
2013/01/02(水) 23:05:10.680338デフォルトの名無しさん
2013/01/03(木) 00:03:45.200339桃白白
2013/01/03(木) 00:14:28.78コピペしちゃったらいいじゃんって思う。インデント節約できるしコピっちゃいなよって思う。
0340デフォルトの名無しさん
2013/01/03(木) 03:27:15.12ひとつのオブジェクトに対して
複数のプロパティを操作するときには便利だと思うけど。
0341デフォルトの名無しさん
2013/01/03(木) 06:30:45.61Withは一階層インデントが深くなるデメリットと
可読性のメリットの天秤をかけて使用するものかと。
そもそもコピペで済まそうなんていうのは、コードとして良くないと思う。
コピペ自体間違っていることもあるわけで。
それとコピペ推奨なんてことになると、似たような関数作りまくりなんていう輩も出てくる。
こうなるとメンテナンスが大変面倒になる。
コードなんて書けば書くほどバグが出るものなんだから
コピーも含めて、できるだけ書かないようにするのがセオリー。
0343デフォルトの名無しさん
2013/01/03(木) 13:12:04.79VSだとIDEがしっかりしてるけど(しすぎて使いづらいのもあるが)VBAだと平打ちが面倒だったりする
0344デフォルトの名無しさん
2013/01/03(木) 21:20:44.21すぐ納得できることならはじめから調べてWithダメとか言わないように
0345桃白白
2013/01/03(木) 22:36:03.73それはすぐ離婚するんなら結婚なんかするなと言ってるようなものだ。
愛し合う二人は幸せを思い描いているときにその後のストーリーなんて
考えないわけ。それが若さでありラブストーリーを成り立たせる基本原則。
むかし、描かれないところは長い休みってことでいんじゃねという一つの
結論を出したドラマがあった。そうロングバケーションである。
山口智子が超かっこよかったのだけれど桃白白じつはそっくりなんだよね。
これ桃白白の横顔なんだけど超似てるっしょ。ほれたっしょ。
http://img64.pp.sohu.com/images/blog/2007/3/15/1/10/111e83e339c.jpg
桃白白はどうでもいいものを盗んで行きました。お前の心です。
0346デフォルトの名無しさん
2013/01/04(金) 00:31:51.860347デフォルトの名無しさん
2013/01/05(土) 19:37:06.26Cells.SpecialCells(xlLastCell)
で有効な最終セルを取得して、1セルずつ
Cell.Borders(xlEdgeTop).LineStyle
Cell.Borders(xlEdgeBottom).LineStyle
Cell.Borders(xlEdgeLeft).LineStyle
Cell.Borders(xlEdgeRight).LineStyle
Cell.Borders(xlDiagonalDown).LineStyle
Cell.Borders(xlDiagonalUp).LineStyle
VarType(Cell)
で検査して、1行全て線無しだったら行削除。
というのをやってますがものすごく処理が遅いです。
なにか良い方法ないでしょうか?
データが入っていない = Valueが空 And 罫線なし
0348デフォルトの名無しさん
2013/01/05(土) 20:23:23.51>>347みたいな処理は、他の作業の合間にバックグラウンドで実行させとくか
飯食ってる間や、会社なら会議中、自宅なら寝てる間とかに実行させとけばいいだけの話じゃん
むしろそれの処理を速くしようと試行錯誤する時間の方が無駄だと思うよ
0349デフォルトの名無しさん
2013/01/05(土) 22:53:45.300350デフォルトの名無しさん
2013/01/05(土) 23:03:40.43セルの色は調べなくていいのか?
0351デフォルトの名無しさん
2013/01/05(土) 23:05:19.08遅いのは判定?削除?
削除は何度もやるんじゃなくて、削除すべき行を全部選択して一気にDeleteしてる?
0352デフォルトの名無しさん
2013/01/05(土) 23:08:16.02範囲でBordersを取得した場合に罫線の有無が混じっていると、
BorderオブジェクトのLineStyleがNullになるっぽいから、
それを利用して一行単位で判定すれば良いんじゃないか?
その時はIsNullで判定するように注意な。
0353デフォルトの名無しさん
2013/01/06(日) 05:41:15.90新規シートに有効なセルをコピペするんじゃダメなの?
0354デフォルトの名無しさん
2013/01/06(日) 07:25:24.310355デフォルトの名無しさん
2013/01/06(日) 07:47:39.21判定して一行削除する処理が遅いって話なんじゃ?
値が入っている有効セルの判定なんてググればすぐ分かる。
http://www.happy2-island.com/excelsmile/smile03/capter00702.shtml
スクロールが長いのが嫌ということなら、こんな感じかな。
試してないから早くなるのか分からんが。
【準備】
列幅とか問題っていうのであれば、列幅だけ調整したシートを非表示で用意しておく
【実行】
1.【準備】で用意したシートをコピーする。
2.データが入っているシートの有効範囲をコピー
3.1.でコピーしたシートに2.の内容を貼り付け
4.場合によっては最終行の罫線を調整
0356355
2013/01/06(日) 07:52:32.78検査開始行が分かっていれば、値が入っている有効セルの行さえわかれば
一気に削除という方法もあるかも。
0357デフォルトの名無しさん
2013/01/06(日) 08:39:25.13>値が入っている有効セルの判定なんてググればすぐ分かる。
元のレス (>>347) をちゃんと読めば、「有効な最終セルを取得」は
既にやってることぐらいわかるでしょ。
Excel の「有効セル」と >>347 が言う「データが入っているセル」が
異なることぐらい理解しようよ。
0358347
2013/01/06(日) 08:47:28.23>>348
量が多いので隙間の時間では終わらないんです。
>>350
色は無視してOKです。
>>351
判定が遅いです。
削除は一行づつやっているので改善してみます。
0359347
2013/01/06(日) 08:51:21.28これは知りませんでした。
試してみます。
>>355
UsedRangeというものがありましたか。
UsedRangeとSpecialCells(xlLastCell)の間を削除対象とすれば良さそうですね。
UsedRangeがどういう判定するのか確認してみます。
0360デフォルトの名無しさん
2013/01/06(日) 09:00:32.10「ワークシートの最終行、最終列を取得する」でググってコード書いてみたけど
これじゃだめかな?(動作確認してないですw)
'Excelが認識している最後尾
maxExcelRow = Selection.SpecialCells(xlCellTypeLastCell).Row
'ユーザが認識している最後尾
maxUserRow = ActiveSheet.UsedRange.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
'認識の差分を削除
.Range(maxUserRow + 1 & ":" & maxExcelRow).Delete
0361デフォルトの名無しさん
2013/01/06(日) 12:29:41.130362デフォルトの名無しさん
2013/01/06(日) 12:44:27.79みんなの話は下って前提だけど、それなら何も考えずに全部消せばいいだけだろ
上なら画面表示とか再計算とか止めればかなり速度改善するぞ。すでにやってるかもしれんが
まあその場合は空行判定を簡素化して速度稼ぐぐらいか
0363デフォルトの名無しさん
2013/01/06(日) 13:02:29.09単純に最終行までDeleteしただけだとスクロールバーは短くならなかった気がする
0364デフォルトの名無しさん
2013/01/06(日) 14:26:59.79いちいち行削除とかしなくても、Ctrl+Sで上書き保存した瞬間にスクロールバーのスライダーの長さは元に戻ったぞ
再現の手順
(1) Excel起動
(2) A1にデータを入れ、名前を付けて保存
(3) A1000に飛んでデータを入力、Ctrl+S
(4) A1000を選択してDeleteキーを押してデータ消去
(5) A1に飛んでからCtrl+S → その瞬間にスライダーが長くなる
0365デフォルトの名無しさん
2013/01/06(日) 15:33:30.810366デフォルトの名無しさん
2013/01/06(日) 19:06:42.71下側を削除するって前提だと
色は無視とか言ってるから、エクセル上で最終だと判断されるセルと
自分で設定したい最終行が違うんじゃね
セーブしろってのは>>349で出てるし
0367デフォルトの名無しさん
2013/01/07(月) 00:31:13.44そもそも >>347 に「データが入っていない = Valueが空 And 罫線なし」って
書いてあるんだから、Excel の最終セルの判断と違うのは自明だと思うが…
0368デフォルトの名無しさん
2013/01/07(月) 14:58:50.54ただし行はどこでも良い(連続した行を選択するが、連続しているかどうかはチェック不要)
例えば
4〜7行をまとめて選択している場合→複数行選択なのでOK
C4〜E7のセルを選択している場合→NG
C4だけ選択している場合→NG
C列を選択している場合→NG
0369デフォルトの名無しさん
2013/01/07(月) 15:15:20.33必ず連続してるんなら
Selection.Rows.Count >1
Selection.Columns.Count = Columns.Count
で判定できる
逆に、連続してないと判定が面倒になる
0370デフォルトの名無しさん
2013/01/07(月) 16:09:11.37おお、素晴らしい!
即レス有り難うございます
0371デフォルトの名無しさん
2013/01/07(月) 19:22:18.66i_" & k & "= x
こんな感じで変数の中に変数を使いたいのですがエラーになります
変数の中に変数は使えないのでしょうか?
それとも書き方が間違っているだけでしょうか?
0372デフォルトの名無しさん
2013/01/07(月) 19:31:48.47変数の中に変数なんて使えない。
どういうことをやろうとしてるのかな?
0373デフォルトの名無しさん
2013/01/07(月) 19:54:32.13>i_" & k & "= x
>i_" & k & "= x
>i_" & k & "= x
>i_" & k & "= x
クソにも限度ってもんがあるだろ
0374デフォルトの名無しさん
2013/01/07(月) 20:07:28.46変数名に変数は使えない
配列を使いなさい
0375デフォルトの名無しさん
2013/01/07(月) 20:09:43.82i_2=x
i_3=x
i_4=x
i_5=x
ってしたいのか・・・
素直に配列使えw
0376デフォルトの名無しさん
2013/01/07(月) 20:11:44.21難しそうですけど頑張って調べてみます
0377デフォルトの名無しさん
2013/01/07(月) 20:35:55.750378デフォルトの名無しさん
2013/01/08(火) 00:15:11.250379デフォルトの名無しさん
2013/01/08(火) 10:43:40.50Application.EvaluateとかはVBAに対しては効かんのじゃないかな
0380デフォルトの名無しさん
2013/01/08(火) 23:20:49.23糞コードにも程があるw
0381デフォルトの名無しさん
2013/01/08(火) 23:28:21.07モジュールに変数は使えるんだがなあ
0383デフォルトの名無しさん
2013/01/09(水) 06:11:50.95モジュールに変数って>>375のように
モジュール名_1
モジュール名_2
モジュール名_3
モジュール名_4
とかやってるの?
0384デフォルトの名無しさん
2013/01/09(水) 13:37:15.08右クリックメニューで呼び出すコード名を、変数つかって簡略化したり部品化したり
0385デフォルトの名無しさん
2013/01/09(水) 16:32:49.47つ 連想配列
どんなことがやりたいかは大体想像が付く
俺もVBA始めたばかりのころに、それと同じ事が出来ないものかと
悩んで調べて試行錯誤したから
でも連想配列使ったらあっさり解決した
オススメは組み込みのCollectionではなくScripting.Dictionary
0386デフォルトの名無しさん
2013/01/10(木) 00:08:46.21こればっか使ってる。
0387デフォルトの名無しさん
2013/01/10(木) 00:36:14.11Dictionaryとは一言で言うとなんですかな?
0388デフォルトの名無しさん
2013/01/10(木) 00:48:12.090389デフォルトの名無しさん
2013/01/10(木) 09:22:25.38ユーザーフォームのテキストボックスに書き込んだ内容を
別のシートに書き込むというものを作っています。
12個のシートがあり、その中の1つに書き込みたいんですけど
テキストボックスに入力すると、12個すべてのシートに描かれてしまいます。
12個の中から1つを判別するにはどうすればいいでしょうか?
activesheetを用いてできますか?
0390デフォルトの名無しさん
2013/01/10(木) 09:33:49.80シート名は定数なりで定義しておく
ユーザーによるシート追加や名称変更があるんなら設定シートでも作ってそこにシート名を書くようにする
0391デフォルトの名無しさん
2013/01/10(木) 09:52:02.49ありがとうございます!できました!
0392デフォルトの名無しさん
2013/01/11(金) 01:47:35.22作りたいのは特定範囲に数値が入力されたら、その数値を比較して
小さい場合にメッセージを出す
A1からA10に5以下の数値が入力されたら小さいってメッセージを
A11からA15は10以下で
B1からB15は3以下の数値で同じように小さいってメッセージをvbaで作りたいです
いろいろあってvbaで作りたいです
入力規則だったかなんかのエラーメッセージではなくvbaで作りたいです
どなたよろしくお願いします
0393デフォルトの名無しさん
2013/01/11(金) 02:21:28.320394デフォルトの名無しさん
2013/01/11(金) 02:44:17.730395デフォルトの名無しさん
2013/01/11(金) 03:22:35.650396デフォルトの名無しさん
2013/01/11(金) 08:40:08.27>>1の★5を声をだして読め。そして理解してから質問しろ。
0397392
2013/01/11(金) 10:45:33.01どなたか助けてください!
作りたいのは特定範囲に数値が入力されたら、その数値を比較して
小さい場合にメッセージを出す
A1からA10に5以下の数値が入力されたら小さいってメッセージを
A11からA15は10以下で
B1からB15は3以下の数値で同じように小さいってメッセージをvbaで作りたいです
いろいろあってvbaで作りたいです
入力規則だったかなんかのエラーメッセージではなくvbaで作りたいです
どなたよろしくお願いします
0398デフォルトの名無しさん
2013/01/11(金) 10:56:47.770399デフォルトの名無しさん
2013/01/11(金) 11:25:16.01おそらく躓くのは入力(変更)されたセルが
特定の単一セルではなく、一定の範囲内にあるかどうかを判定する部分だろうが
「セルの値が5以下だったらメッセージを出す」程度は自分で書けるだろ?
そういうところを少しでも書いて来て努力と真剣さの色見えるなら、レベルが低くても協力してやる気になるが
自分では何もせずに丸投げして、運良く答えてくれる人が居たら
「2chのバカ共も偶には役に立つなw
下手に出たフリして質問したらアッサリ釣られて無償労働(回答)してくれたよw」
と嘲笑うつもりなら、協力するつもりは一切無い。
以上。
0400392
2013/01/11(金) 11:35:15.030401デフォルトの名無しさん
2013/01/11(金) 11:53:26.320402デフォルトの名無しさん
2013/01/11(金) 11:57:20.33本人だとしたら、この悔し紛れの負け犬遠吠え後釣り宣言は恥ずかしすぎるw
0403デフォルトの名無しさん
2013/01/11(金) 17:15:03.81行はrowな
列はcolumn
cellsのrowとcolumnが一定範囲にあればいいんだから・・・
後はわかるな?
0404デフォルトの名無しさん
2013/01/11(金) 19:34:03.470405デフォルトの名無しさん
2013/01/11(金) 19:40:51.02それぞれを配列のWorkbookオブジェクト変数にして
いろいろしたいんですが
どうすればいいですか?
とくに配列の( )の中の数字をいくつ数があるかわからないからどう宣言するかとか。
0406デフォルトの名無しさん
2013/01/11(金) 19:51:09.91配列変数ではなく連想配列使え
0407デフォルトの名無しさん
2013/01/11(金) 19:52:36.431個ずつ増やしてRedimするコード書くと遅くなるって文句つける人がでるから注意な
0408デフォルトの名無しさん
2013/01/11(金) 19:52:47.85ReDimでググれ
0409デフォルトの名無しさん
2013/01/11(金) 19:56:48.30古来よりそう言い伝えられてるね
0410デフォルトの名無しさん
2013/01/11(金) 20:00:27.63VBAには残念ながら連想配列はないんだ
まあ普通はScripting.Dictionaryを使うんだが、あくまでこれは外部機能
あとコレクション使う方法もあるけど、これもイマイチ
0411デフォルトの名無しさん
2013/01/11(金) 20:12:02.95まだそれを理解するレベルに達してないのか?
まあVBはもちろん、VBAは更に組み込みの機能が多すぎだからな
初心者かつVBAしか使えない奴は、内部機能だけで事足りちゃうのかもね
0412デフォルトの名無しさん
2013/01/11(金) 20:19:23.05> 言語って基本的に外部機能使ってなんぼなんだが
初耳だな。
基本なんて言葉を迂闊に使うと恥をかくぞ?
お前の中だけの基本は基本とは言わないからな。
0413デフォルトの名無しさん
2013/01/11(金) 20:38:56.810414桃白白
2013/01/11(金) 20:40:10.95お前の耳にはかまぼこでもつまってんのか?
javaも.netもvbaもライブラリ使ってなんぼのもんだろ。
>>392
教えてやんよ桃白白のインターセクションというやつをな。
ほい、これどうぞ。
https://friendpaste.com/3DWujWgX971XCJpTHA1aqC
0415405
2013/01/11(金) 20:45:13.48コードを示してくれないか?
それすらできないと
みんな初心者と変わらないぞ
0416デフォルトの名無しさん
2013/01/11(金) 20:48:45.040417桃白白
2013/01/11(金) 20:49:54.74桃白白は信心深そうに思われてるかもしれないけれどもじつは無心論者なんだよね。
イエスが神の子だと信じてもいないし、輪廻転生もないと思ってる。前世が見える
といっちゃうやつは完全に頭がいっちゃってると思う。みんな人生の初心者だってこと。
0418デフォルトの名無しさん
2013/01/11(金) 20:56:41.43みんな初心者だよ。
熟練者は2ちゃんなんてやっている暇はない。
0419デフォルトの名無しさん
2013/01/11(金) 22:42:53.58ありがとうございます。
そういうやり方があったんですね。
実際は指定範囲が可変になっていて
ChangeイベントでIntersect&ifだと、行を新たに追加した際に
型が違いますと出てしまって困ってたんですよ。
0420桃白白
2013/01/11(金) 22:49:14.04え、なになに、どういうこと?桃白白はそのIntersectのほうに興味があるわ。
0421デフォルトの名無しさん
2013/01/12(土) 02:23:36.52LeftやRightは使えるんだけど、replaceが動かん。補完もされん。
↓な使い方してます。
buff = replace(stmInPutTextFile.ReadAll, "ab", "zz")
エラー:引数の数が一致しません。または不正なプロパティを指定しています。
0422デフォルトの名無しさん
2013/01/12(土) 02:26:18.740423デフォルトの名無しさん
2013/01/12(土) 02:35:38.05stmInPutTextFile.ReadAllやらがどうなってるのかまず調べろや
0424デフォルトの名無しさん
2013/01/12(土) 02:43:23.04口臭そうだから人と会話する時はガムを噛めや
0425デフォルトの名無しさん
2013/01/12(土) 02:46:12.55VBE使ってちまちま書いてます。
stmInPutTextFileはOpenTextFileで開いたテキストストリームで
テキストファイルの中身は↓こうなってる。
--ここから--
abcdefg
hijklmn
--ここまで--
stmInPutTextFile.ReadAllをmsgboxで確認してみたけど、読めてはいるみたい。
一気にテキストファイルを読みこんで、必要な部分を置換して書き出すっていうのがやりたいんだけど、
いろんなところのサンプルは「Replace」だけで成り立っているのに
あたいのは動かないんだよね…
0426デフォルトの名無しさん
2013/01/12(土) 03:14:05.93InPutTextってなんだよおちょくってんのか
MsgBox Replace( "ShineGomi", "Gomi", "Kasu" )
こういうのを試した結果を示せよアホ
0427デフォルトの名無しさん
2013/01/12(土) 03:19:08.120428デフォルトの名無しさん
2013/01/12(土) 03:26:52.00それができないからここで聞いてるんだけど。
なんでそんなに威圧的になってるかわからない。
結果は一緒だよ
引数の数が一致しません。または不正なプロパティを指定しています。
これだけでなんかわかんのか?
0429デフォルトの名無しさん
2013/01/12(土) 03:47:30.48>これだけでなんかわかんのか?
0430デフォルトの名無しさん
2013/01/12(土) 03:52:05.82普通は動くものが動かないんだ。お前の環境がいちばん怪しいんだよ
0431デフォルトの名無しさん
2013/01/12(土) 03:52:06.170432デフォルトの名無しさん
2013/01/12(土) 03:56:15.52おまえウンコ臭い
パンツは毎日履き替えろや
0433デフォルトの名無しさん
2013/01/12(土) 03:57:10.95そのブックはとりあえず閉じて、新規ブックでReplace関数が動くか試してみろや
0434デフォルトの名無しさん
2013/01/12(土) 04:37:52.63buffが範囲を選択してそうな予感
Replaceって範囲セルを指して置換と単一セルを指して置換じゃ記述変わるぞ?
0435デフォルトの名無しさん
2013/01/12(土) 09:10:02.81ここはお前のサポセンじゃねぇよ
お前こそクレーマー気質だな
お店に行って店員じゃないそこらのお客に質問して返答に怒ってる感じ
0437デフォルトの名無しさん
2013/01/12(土) 10:16:39.52喧嘩はやめてぇ〜♪
二人をとめてぇ〜♪
誰の歌だったっけ?キャリーパムパム?
0438デフォルトの名無しさん
2013/01/12(土) 18:36:56.76ちょっと何言ってるかわからんが、>>426が同じ結果だっていってるんだから
Range.Replaceの話ではないぞ
>>428
Replace選択してShift-F2でオブジェクトブラウザ立ち上げろ
そこに、なんのメンバだと書いてある?
0439デフォルトの名無しさん
2013/01/12(土) 19:02:36.67>>433
ありがとう。別ブックでやったら動いた。
何が原因かわからないんだけど、自分で設定した予約語ってどうやったら確認できるの?
replaceの頭をRで入れてもrに戻されるんだよね。
>>434
Range.とかCell.で試してみたけど一緒な結果だった。
今はテキストファイルの取り扱いでやっててエクセルのシートは使ってない。
>>438
VBA.Strings のメンバー
って書いてある。
ヘルプ出してみたらReplace関数って出た。
>>437
竹内まりやだろ
0440デフォルトの名無しさん
2013/01/12(土) 19:44:16.050441デフォルトの名無しさん
2013/01/12(土) 19:48:20.34予約語云々より一等地の名称は関数名に使うなってことでしょ。
repelaceという名称をつけたいなら何をreplaceする関数なのかという意味を持たせて
replace○○とかにすれば、今回のような予約語を使ってしまったり、
関数名を重複するような問題はぐっと減ると思う。
0442デフォルトの名無しさん
2013/01/13(日) 00:07:07.27プログラム探すのもめんどくさくなってくるしね。
まぁ、肥大化っつっても俺のブックは100k行ってないけど…
>>441
うん。いい勉強になったよ。
名前の付け方には気を付ける。
横着するとよくないな。
0443デフォルトの名無しさん
2013/01/13(日) 00:53:46.56いろんな意味で。
0444デフォルトの名無しさん
2013/01/13(日) 01:21:07.80Option Explicitでエラーが出なくなるまで必死に修正しろ
0445デフォルトの名無しさん
2013/01/13(日) 03:20:18.51"100K行" じゃなくて"(ファイルサイズが)100K いってない" でしょ
と、マジレスしてみる
0446デフォルトの名無しさん
2013/01/13(日) 11:04:06.20100k 「行ってない」 のな。
0447デフォルトの名無しさん
2013/01/13(日) 13:53:00.67VBAのソースだけで100Kあったらそれはそれでスゲーぞ
0448デフォルトの名無しさん
2013/01/13(日) 14:52:53.74まあスゲーと言うほどでもないかと。
0449デフォルトの名無しさん
2013/01/13(日) 15:06:38.60もちろんあったらそのファイルから関連データも一緒に取り出す。
(1) Find使う
(2) WorksheetFunction.Vlookup使う
(3) その他 (詳しく)
(1)はよく変な動きをするし
(2)はひっかからないときエラーが出て困る
「など」の不具合がある。
0450デフォルトの名無しさん
2013/01/13(日) 15:17:58.19fsoだか使えばいいのでは
0451デフォルトの名無しさん
2013/01/13(日) 15:25:24.32エラーが出て困るんならエラートラップすればいいだけ
Errプロパティで分岐
0452デフォルトの名無しさん
2013/01/13(日) 15:57:26.70不具合あるのは君のコードかと・・・
その不具合のあるコードを晒してみたら誰かが改善してくれるよ
0453デフォルトの名無しさん
2013/01/13(日) 18:20:57.83俺だったらFind使うけど、変な動きってのがどんなのか分からない
もっと詳しく教えて
0454449
2013/01/13(日) 18:51:19.07エラーや不具合や変な動きというのは
みんなエスパーしてくれよ。
VBA上級者ならそんなの簡単に推測できるだろ?
教えてとか晒してとか、単にニヤニヤしたいだけだろ?
fsoは調べてみたけど高級そうなのでとりあえず踏み込まないことにした。
やっぱりFindを使うことにしてFindの使用方法を極めたほうがいいのかな?
0455デフォルトの名無しさん
2013/01/13(日) 18:56:13.04まだそこまで達してないようだから
0456449
2013/01/13(日) 19:00:11.21Findはかなりクセのあるメソッドなるは知っとるけ?
Ctrl+Fと同じ機能だけど、Ctrl+F押したときのWindowの設定がデフォになることとか。
0457デフォルトの名無しさん
2013/01/13(日) 19:16:54.340459デフォルトの名無しさん
2013/01/13(日) 20:30:11.940460デフォルトの名無しさん
2013/01/13(日) 20:31:39.94亀ですがカラーリングとソート無事できました
本当に助かりました
ありがとうございました
0461デフォルトの名無しさん
2013/01/13(日) 23:15:42.41一番スッキリと的確に答えられた人を勝者とします。
【問】 あるブックに複数シートがあり、全セルを対象としてセルの値をすべて別ブックの1つのシートの1列目に書き出しなさい。
同一のセルの値がある場合は、当然1つだけを書き出します。
意味がわからなければ「エスパー」してください。
0462デフォルトの名無しさん
2013/01/13(日) 23:40:26.64問題ですじゃねえよカス
頭下げて教えを乞えないゴミはしね
0463デフォルトの名無しさん
2013/01/13(日) 23:50:28.39こんな上から目線のレスの問いに答える必要なし、というエスパーの結果となりました。
0464デフォルトの名無しさん
2013/01/13(日) 23:54:41.300465デフォルトの名無しさん
2013/01/14(月) 05:50:56.43文章問題の設問ってのは実は難しいだぜ
それこそプログラミングと同じ位難しい
意味が分かりやすいのはもちろんのこと、例外が発生しないように
あるいは例外時にどうするかまで事細かに考えなければならない
1つだけは例外への条件を提示しているが全然足らず、それを漏れなく提示できないレベルの頭なら
「質問」はいいが、「出題w」なんて出来るレベルには無いので
余計荒れる原因になる不適切な出題など投下しないで大人しくしてろ
0466デフォルトの名無しさん
2013/01/14(月) 06:27:10.87問題とはぜんぜん関係ないんだけどさ。
問題文は
Aがあり、Bしろ。っていう形じゃん。
「あり」は「ある」の連用形。「しろ」は「する」の命令形。
動詞の連用形があとの動詞の形に順応するとするなら
Aがあれ。Bしろ。ということになっちゃわない?
0467デフォルトの名無しさん
2013/01/14(月) 11:02:23.790468デフォルトの名無しさん
2013/01/14(月) 11:03:45.880469デフォルトの名無しさん
2013/01/14(月) 15:03:47.16こんなカキコしてるから雪降っちまったじゃねぇか!
0470デフォルトの名無しさん
2013/01/14(月) 15:32:29.890471デフォルトの名無しさん
2013/01/14(月) 16:26:25.280472デフォルトの名無しさん
2013/01/14(月) 16:43:24.720473デフォルトの名無しさん
2013/01/14(月) 17:07:47.820474デフォルトの名無しさん
2013/01/14(月) 21:05:11.37For i = 1 To Worksheets.Count
←
Next
矢印の部分で順番にシートをアクティブにするにはどうしたらいいんでしょ?
0475474
2013/01/14(月) 21:09:50.85Worksheets(i).Activate
MsgBox i & "番目のシート"
Next
End Sub
でしたね^^;
0476デフォルトの名無しさん
2013/01/14(月) 22:49:49.70Step -1
0477デフォルトの名無しさん
2013/01/15(火) 02:30:46.70ある条件のセルには色を塗るというルールを決めてみんなで勝手に編集してるのですが
ここで問題。
標準の色の「赤」や「黄」はみんなそこから選ぶから問題はないんだけど
「ピンク」や「水色」はみんな色が微妙に違ってるのを選んでてバラバラ。
これをVBAで統一の「ピンク」や「水色」にしてください。
0478デフォルトの名無しさん
2013/01/15(火) 03:22:09.90Dim c As Range
For Each c In ActiveSheet.UsedRange
c.Interior.Color = color_fix(c.Interior.Color)
Next
End Sub
Function color_fix(old_color As Long) As Long
Dim r As Long, g As Long, b As Long
r = old_color Mod 256
g = old_color \ 256 Mod 256
b = old_color \ 65536
If r > 230 Then r = 255
If g > 230 Then g = 255
If b > 230 Then b = 255
If r < 25 Then r = 0
If g < 25 Then g = 0
If b < 25 Then b = 0
color_fix = b * 65536 + g * 256 + r
End Function
0479桃白白
2013/01/15(火) 07:09:19.46https://friendpaste.com/1HYrR4QsPTj7VwpJG5egNc
0480hope2013
2013/01/15(火) 09:17:41.89このADOをOpenして閉じるだけで、このBookを閉じても、VBAProjectが残ってしまいます。
何か回避策はありますでしょうか?よろしくお願いします。
0481デフォルトの名無しさん
2013/01/15(火) 09:25:45.370482477
2013/01/15(火) 10:45:39.52コードみると動きそうだけど
どのセルの色もさっぱり色は変わりませんわ。
0483デフォルトの名無しさん
2013/01/15(火) 10:49:28.17同一の値があるかどうか調べて
(1) もしなければ「問題ないよ」、あれば「値の重複セルがあるよ」とMsgBoxで表示するコードはどうなりますでしょうか?
さらにすすんで
(2) 値の重複セルがあった場合、そのすべてをシンプルに「"ABC"が重複 (アドレスA1, B2, B4)、<改行>"うんこ"が重複(アドレスA5, B1)」
みたいな感じでMsgBoxで表示するコードはどうなりますでしょうか?
(1)を基本に考えてるけど、
(2)がシンプルなコードで書けてしかもバグの全くない完璧な動きをするなら(2)を採用します。
0484デフォルトの名無しさん
2013/01/15(火) 11:54:45.61丸投げかよ
0485483
2013/01/15(火) 12:12:39.520486デフォルトの名無しさん
2013/01/15(火) 12:23:21.23丸投げじゃねえだろ
使えないなら採用しないってんだからもう少しひどいw
0487デフォルトの名無しさん
2013/01/15(火) 14:13:10.25幅がありすぎてプログラムできんわ
0488デフォルトの名無しさん
2013/01/15(火) 14:21:45.25それは変だわ。
RGBの値を変更するだけでいいように作ればいいだけじゃんw
本筋のコードは関係ないだろ。
0489デフォルトの名無しさん
2013/01/15(火) 14:37:54.09Set oDic = CreateObject("Scripting.Dictionary")
For Each c In Selection
If oDic.exists(c.Text) Then
oDic.Item(c.Text) = oDic.Item(c.Text) & "," & c.Address
Else
oDic.Add c.Text, c.Address
End If
Next
ks = oDic.Keys
For i = 0 To oDic.Count - 1
k = ks(i)
t = oDic.Item(k)
If InStr(t, ",") > 0 Then
If Len(s) > 0 Then s = s & vbCrLf
s = s & """" & k & """が重複 (アドレス" & Replace(t, "$", "") & ")"
End If
Next
If Len(s) > 0 Then MsgBox (s)
Set oDic = Nothing
End Sub
0490477
2013/01/15(火) 14:46:47.81このへんを使ってると思われます。
http://2ch-dc.mine.nu/v4/src/1358228733818.jpg
0491デフォルトの名無しさん
2013/01/15(火) 15:01:41.25リスト作って、ピンクとか赤とかのセルを系統振り分ければいいじゃん
コード側で読み出せ
0492デフォルトの名無しさん
2013/01/15(火) 16:50:14.50これなら想定する色がなんでも対応できる
Function 同じ色(色1, 色2, 誤差) As Boolean
r1 = 色1 Mod 256
r2 = 色2 Mod 256
g1 = 色1 \ 256 Mod 256
g2 = 色2 \ 256 Mod 256
b1 = 色1 \ 65536
b2 = 色2 \ 65536
If Abs(r2 - r1) < 誤差 And Abs(g2 - g1) < 誤差 And Abs(b2 - b1) < 誤差 Then
同じ色 = True
Else
同じ色 = False
End If
End Function
0493デフォルトの名無しさん
2013/01/15(火) 20:40:48.540494デフォルトの名無しさん
2013/01/16(水) 15:51:12.130495デフォルトの名無しさん
2013/01/16(水) 15:56:32.940496494
2013/01/16(水) 17:35:06.75色付けのルールをチームの中で決めて運用していくのがいいのかなと。
と、思ったけど、>>477をよく見ると条件付き書式で対応できるんじゃねえの?
と思うようになった。
わざわざVBAで書くほどのことじゃないでしょ。
もっと楽しようぜ。
0497デフォルトの名無しさん
2013/01/16(水) 17:39:28.07今までに入力したのを何とかしたいって話なんじゃ
0498デフォルトの名無しさん
2013/01/16(水) 17:55:48.73今までに入力したやつは書式のコピーで事足りるんじゃね?
0499デフォルトの名無しさん
2013/01/16(水) 21:15:44.38パターン上にあるやつじゃないの?
自作カラーなんてないんじゃね?
0500デフォルトの名無しさん
2013/01/16(水) 21:37:11.60色付きセルがランダムに何千個もあったりしたらと思うとぞっとする
0501デフォルトの名無しさん
2013/01/16(水) 21:40:42.02>>490の画像の中でピンクに見える色はいくつある?
たぶん見る人によってかなりの幅があるぞ
モニターが変わると色の見え方も変わるし、色付きシートの現物を見ないことには
どこまで対応すればいいのか想像も付かん
0502498
2013/01/16(水) 22:22:23.02そういう考え方もあるけど、グループみんなで扱ってるブックなら
ランダムってことは稀だと思うけど。
>>477を見る限り、ある条件で色を付けてるってことだから、バラバラの色は気にしなくて
ある条件の時のセルの色を決定すればいいと思うけどね。
今後、条件付き書式を使うんであれば、ある条件の時に条件付き書式を設定する
ようにしてあげれば統一が取れると思う。
0503デフォルトの名無しさん
2013/01/17(木) 00:44:30.260504デフォルトの名無しさん
2013/01/17(木) 01:12:37.49せいぜい20だろ
そんなのエイヤと条件分岐でいいじゃん
0505デフォルトの名無しさん
2013/01/17(木) 06:57:38.38って色の自由選択とかどんな中学生集団だよ
0506デフォルトの名無しさん
2013/01/17(木) 07:17:38.85色固定にしちゃったらさ、別の色にしたい時にまたコード書かなくちゃいけないでしょ。
もっと楽に作ろうと思わないのかな?
条件付き書式程度にとどめておけば、使いたい色に変更できるし、コードを変更する必要がない。
コード書くというのは新たなバグを生む。
最初から、できるだけコードは書かないような作りにしておけば、後が楽になるし、
空いた時間はまた別な新たなことができるだろ。
0507デフォルトの名無しさん
2013/01/17(木) 07:42:50.69ごめん
色でなく名前とかIDとかを加えて条件付き書式で(やれよ。)
って(いうか)色の自由選択とかどんな中学生集団だよ
0508デフォルトの名無しさん
2013/01/18(金) 20:09:55.89「NumberFormatLocal」("0_ "とか"m/d/yyyy"とか"@"とかね)は
お互いに密接な関係があるの?
こういうのをお手のものに使いこなすために
知っておくべきことをまとめていただけますか?
0509デフォルトの名無しさん
2013/01/18(金) 20:43:33.79関係ないよ
後半:
俺様が勉強しやすいように、資料や情報をおまえらが無償であつめてまとめろ
なんて傲慢な内容を表面だけ丁寧に言っても、誰がその内容に従うかよw
自分から努力することを放棄して、都合の良い資料を出せなんて我が儘言ってないで
まずは自ら努力していろいろ調べて、それでも解らないところがあったら具体的に聞け
以上
0510508
2013/01/18(金) 21:26:27.39まあこの質問はVBAの達人でそれに熟知してないと答えられないだろうから
中途半端に知ってる人が偉そうに答えてほしくはないけどね。
0511デフォルトの名無しさん
2013/01/18(金) 21:40:04.32「こういうの」ってどういう意味?
質問が曖昧すぎて答えられない。
0512デフォルトの名無しさん
2013/01/18(金) 21:42:05.13じゃなくて
やってみてどうなるかを覚えるほうが
0513デフォルトの名無しさん
2013/01/18(金) 21:42:45.82知っておくべきこと→Is系のチェック関数としてまとまってるだろ
0514デフォルトの名無しさん
2013/01/18(金) 22:00:34.19でいい。
受験勉強じゃあるまいに
0515デフォルトの名無しさん
2013/01/18(金) 22:40:31.880516デフォルトの名無しさん
2013/01/19(土) 06:24:00.42いい加減ググレカス!
0517デフォルトの名無しさん
2013/01/19(土) 06:33:48.88別にそれはそれでぜんぜん恥ずべきことじゃない。
むしろそれを頭に完全に整理できてる人なんて100万人に1人くらいかもしれないし。
だから答えられない人はだまってていただいてぜんぜんOKなのに。
なぜ偉そうに説教しようとするかな。
0518デフォルトの名無しさん
2013/01/19(土) 06:55:17.73答えがわかっててもどこから手を付けていいのかわからなくなってパニックになる
初心者の質問に対して怒る人は、まあ好意的に解釈すれば完璧主義者だな
「こんな大変な事を気軽に聞くんじゃねぇよ」みたいな
0519デフォルトの名無しさん
2013/01/19(土) 07:12:10.93たしかにそうだね。
初心者の質問に対して怒る人は完璧主義者かもしれない。
別にその人に回答を要求してないのに要求された気になってて
しかもその回答は完ぺきであるべきて論理的な矛盾は1%も含まれてはいけないみたいな。
でも回答できる人はまとめサイトを紹介するとか
自分でまとめたものをコピペするだけでいいのに。
0520デフォルトの名無しさん
2013/01/19(土) 07:33:10.69要するに「ググれ」だろ
0521デフォルトの名無しさん
2013/01/19(土) 13:21:35.54新唐人テレビは中国の民主化を望む中国人自身によるテレビ局で、海外に拠点をおき、
中国共産党の圧力に屈する情けない日本のマスゴミよりもよっぽどまともなテレビ局です。
日本では中国共産党の圧力により報道出来ないニュースが沢山取り上げられています。
新唐人テレビのような勇気ある報道機関を広める事で、中共の圧力に屈し、
真実を伝えない日本のマスゴミのへなちょこぶりを浮き彫りにする事にもなります。
新唐人テレビを日本や在日中国人の間に広めて、
中共が日本に戦争をしかけてくる前に中共を内部崩壊させましょう!
0522デフォルトの名無しさん
2013/01/19(土) 16:54:06.320523デフォルトの名無しさん
2013/01/19(土) 18:57:35.03人に言う前にお前が紹介してやれよw
0524デフォルトの名無しさん
2013/01/21(月) 20:53:19.900525デフォルトの名無しさん
2013/01/22(火) 12:26:15.46フィルターしたシートに
他シートのSelectした部分のデータを
「うまく」コピペするためのコードを教えていただけませんか?
コピー先だけがフィルターされてて、コピー元はフィルターされてません。
「うまく」とは表示されてるセルにちゃんと記入されるということです。
0526デフォルトの名無しさん
2013/01/22(火) 13:21:30.66Forで回してセルが非表示かどうか調べながら一セルずつコピーしてくしかないと思う
0527デフォルトの名無しさん
2013/01/22(火) 14:39:06.270528デフォルトの名無しさん
2013/01/22(火) 14:43:11.830529デフォルトの名無しさん
2013/01/22(火) 15:02:15.21A列はセルに重複データも含まれています。
B列もセルに重複データも含まれています。
しかしA列のセルとB列のセルの文字列を連結した値は、すべての行でユニークです。
この「A列のセルとB列のセルの文字列」でAdvancedFilter機能を使いたいんですが
コードはどうすればいいか教えていただけませんか?
AdvancedFilter機能で使うフィルター用データは別シートでSelectされているものとします。
0530529
2013/01/22(火) 15:05:33.41(A列) (B列)
チーム 守備
巨人 投手
巨人 捕手
巨人 左翼
巨人 中堅
巨人 右翼
阪神 投手
阪神 捕手
阪神 左翼
阪神 中堅
阪神 右翼
中日 投手
中日 捕手
中日 左翼
中日 中堅
中日 右翼
<フィルタ用>
チーム 守備
巨人 捕手
中日 投手
阪神 捕手
0531デフォルトの名無しさん
2013/01/22(火) 15:44:24.08見えると邪魔なら非表示にしてもいいし
C列は他の用途で使ってるならDでもEでもZでもIVでもXFDでもいいし
後出しで作業列使うのはやだとか言うなよ
使わずにも出来るけど、使ったところで弊害無いし面倒だから
0532デフォルトの名無しさん
2013/01/22(火) 15:59:16.10セル範囲にかわるデータセット渡せないのかな
あるいはc列不可視に連結出力
フィルター使わなくていいなら、データをバックアップして結合して該当抜き出し
0533529
2013/01/22(火) 16:07:09.400534529
2013/01/22(火) 16:08:07.120535デフォルトの名無しさん
2013/01/22(火) 16:18:27.94自分のファイルで開いて、元データだけ取得して加工するのは?
0536デフォルトの名無しさん
2013/01/22(火) 16:57:24.53・結合データ出力
・フィルタリング
・結果取得
・シート削除
0537デフォルトの名無しさん
2013/01/22(火) 18:33:11.17何が問題なのかさっぱりわからん。
AdvancedFilter機能使いたいんならググればいいじゃん。
サンプルコードならすく検索できるだろ。
そのサンプルコードを参考に作ってみて分からなければここで質問してもいいと思うけど。
0538デフォルトの名無しさん
2013/01/23(水) 01:24:21.520539デフォルトの名無しさん
2013/01/23(水) 07:04:43.510540デフォルトの名無しさん
2013/01/23(水) 14:16:02.09for文のカウンタ変数は、for文をプロシージャの中で複数使う場合
宣言は一回でよろしいのでしょうか?iという変数を宣言しておけば、違う
for文でも普通に一緒のが使えますよね?
こういうのはよくないのでしょうか?
0541桃白白
2013/01/23(水) 14:27:29.94下は良くないけど上は良い。
桃白白なら同じの使っちゃう。だって別の変数を宣言するのめんどうなんだもん。
Dim i
For i = 1 To 10
……
Next
For i = 1 To 10
……
Next
Dim i
For i = 1 To 10
For i = 1 To 10
……
Next
Next
0542デフォルトの名無しさん
2013/01/23(水) 14:31:52.18Next i じゃないと動かないんじゃないっけ
Step って省略しちゃうのか
Step って明示したくない?
0543デフォルトの名無しさん
2013/01/23(水) 14:33:43.73言語仕様的には何の問題もないけど
ヒューマンエラーを招きやすいって意味では避けた方がいいね
まあ使い捨てコードや、こういうところでの回答としてサンプルコード晒す場合とかなら別にいいが、
長く使うつもりなら、そもそもForを1回しか廻さなくても、そしてiに限らず1文字変数を使うのは避けるべき
カウンタにi,j,k,lってのは、変数の文字数が多くなると弊害が出る時代に生まれた慣習であり
今となっては悪習でしかないからね
0544桃白白
2013/01/23(水) 14:40:10.44Nextだけで動くよ。
桃白白はStepを省略しちゃう。だってStepを書くのめんどうなんだもん。
0545540
2013/01/23(水) 14:44:54.88どうもありがとうございます。
明確にはあまり決まっていないのですね。参考にします。
>>桃白白
市況2にいるタオパイパイっていうコテハン思い出しました。
0546デフォルトの名無しさん
2013/01/23(水) 14:58:51.42複数ネストしたループに一文字変数を使った場合、カウンタ変数がどこのループ
のカウントをしているのかわからなくなってバグを引き起こしやすい。
ループのカウンタ変数を状況によって一文字や単語?に使い分けていたりするのも有りだと思うけど
一文字変数を使ってはいけない状況で使ってしまいそうで怖い。
なので、どんな時でも一文字変数は使わないようにしておくとバグを起こしにくくなる。
0547デフォルトの名無しさん
2013/01/23(水) 15:00:39.880548デフォルトの名無しさん
2013/01/23(水) 15:03:31.21個人的にはNextだけだとネストしたときに読みにくいから
必ずカウンタ変数もつけてる
そのほうがデバッグしやすい
Stepのほうは Step 1 なら省略する
でも、たまにそこが可変の処理
(たとえば時系列で並んだデータを、1秒ずつ処理するか、1分ずつ処理するか、みたいな時)
にはStepで指定することも有る
0549桃白白
2013/01/23(水) 15:06:34.78桃白白それにはちょっと断固反対の立場だわ。グローバル変数でってことなら
わからないでもないけど、ローカル変数にまでその考えを適用しちゃったら
こういうことになっちゃうよ?バブルソートのロジックさえ複雑に見えない?
Sub BubblingSortTaopaipaiSpecial(ByRef unsortedArray As Variant)
Dim outerLoopIndex As Long
Dim innerLoopIndex As Long
For outerLoopIndex = LBound(unsortedArray) To UBound(unsortedArray) - 1 Step 1
For innerLoopIndex = LBound(unsortedArray) To UBound(unsortedArray) - 1 Step 1
If unsortedArray(innerLoopIndex) > unsortedArray(innerLoopIndex + 1) Then
Dim temporaryElement
temporaryElement = unsortedArray(innerLoopIndex)
unsortedArray(innerLoopIndex) = unsortedArray(innerLoopIndex + 1)
unsortedArray(innerLoopIndex + 1) = temporaryElement
End If
Next innerLoopIndex
Next outerLoopIndex
End Sub
Sub Sort(a)
Dim i, j, t
For i = LBound(a) To UBound(a) - 1
For j = LBound(a) To UBound(a) - 1
If a(j) > a(j + 1) Then
t = a(j)
a(j) = a(j + 1)
a(j + 1) = t
End If
Next
Next
End Sub
0550デフォルトの名無しさん
2013/01/23(水) 15:11:38.94逆もまたしかり
0551デフォルトの名無しさん
2013/01/23(水) 15:17:59.30バカ正直に単語を並べればいいってものじゃないでしょ。
outerLoopIndexなんてouterIdxでも通じるし。
「outer」っていうのが肝だから省略するのは考えるところだけど、
「LoopIndex」なんていうのはカウンタ変数であることが解ればそんなに長く書く必要はない。
0552桃白白
2013/01/23(水) 15:21:51.82うんだから、桃白白は1文字の変数使っちゃったらロジックを
明快に示すことができるよって立場なの。
0553デフォルトの名無しさん
2013/01/23(水) 15:25:11.690554デフォルトの名無しさん
2013/01/23(水) 15:29:39.450555デフォルトの名無しさん
2013/01/23(水) 15:31:26.43VBSなら Next'Cnt とかやる
Stepは変数使ったり-1とかであったりなかったりってのが嫌だから
Stepは書くわ
0556デフォルトの名無しさん
2013/01/23(水) 15:32:25.41> Sub Sort(a)
> Dim i, j, t
> For i = LBound(a) To UBound(a) - 1
> For j = LBound(a) To UBound(a) - 1
> If a(j) > a(j + 1) Then
> t = a(j)
> a(j) = a(j + 1)
> a(j + 1) = t
> End If
> Next
> Next
> End Sub
あともう一つ。
jがカウンタ変数になっているループの中でiも使うパターンだってあるわけで、
変数が多くなってくると本当に解読が困難になってくる。
一文字変数が使われている一行を切り取って何を行なっている処理なのか普通はわからないと思うけど。
こんなやつは前後のコードを見ないといけなくなるからめんどくさい。
> a(j + 1) = t
こういうのはその時は本人が理解できているからいいのかもしれないけど、
時間が経つと何やってるんだっけ?と本人も理解できないようなコードに化ける。
0557デフォルトの名無しさん
2013/01/23(水) 15:35:56.34for col = 1 to 20
next
next
みたいに、簡潔で意味のある変数名選択しろってことだよ。
0558デフォルトの名無しさん
2013/01/23(水) 15:41:37.50同意。
特にExcelでセルの位置を舐めるときは、そういう変数名がいいね。
0559桃白白
2013/01/23(水) 15:42:35.41ああまあね、うん。
0560桃白白
2013/01/23(水) 15:44:24.78じゃあxとyでもいいわけじゃん。
簡潔で座標の意味を表すことができるわけだからさ。
0561デフォルトの名無しさん
2013/01/23(水) 15:51:43.09一文字変数でロジックを明快に示すことは難しいと思うけど。
あまりにもコードがスッキリすぎて何をどうしたいのか理解するのに苦労する。
他人に物を伝えるときに一文字発すれば伝わるか?
最低限何かしら単語を発さないと伝わらないと思うが。
0562デフォルトの名無しさん
2013/01/23(水) 15:54:35.90Excelの場合、行列という概念があるんだが。
0563デフォルトの名無しさん
2013/01/23(水) 15:56:40.04座標って言っても、x,yだけじゃ何の座標か解らんな
例えばマウスカーソルの座標だったらcurX,curYとかな
>>562
シート上でも座標概念はあるぞ
x,yではなくTop,Leftだが
0564桃白白
2013/01/23(水) 15:58:49.52他人にものを伝えるときに一文字しかしゃべらない人はそれはもう頭がおかしい人じゃん。
桃白白は頭がおかしい人じゃないからそんなことしない。いまも一生懸命文章書いてるよ。
何をするのかは関数名で示すなり、ここではバブルソートが行われるんでんがなみたいな
コメント書いとけばいいじゃん。>>549を見てよ。どう見たって下のほうがわかりやすいっしょ。
0565桃白白
2013/01/23(水) 15:59:45.36Cells(y, x)でわかるっしょ。そんなのわかるっしょ。わかるっしょ。
0566デフォルトの名無しさん
2013/01/23(水) 16:03:29.55外側からi,j,k,l.m...とするよう昔から相場が決まっている。
逆にカウンタ変数以外にこれらを使うことはない。
一文字で十分伝わる。
0567デフォルトの名無しさん
2013/01/23(水) 16:31:18.77くだらん事で盛り上がってんなや
プログラミング一年生かお前ら
0568557
2013/01/23(水) 16:41:11.38hoge(○, △)と表記するとき、まぁほとんどの人がxとyを選択するだろうなぁ的な文脈だったら
xとyがいいよ。
でも、cells(y, x)はあまり一般的じゃ無い気がするけど。
0570桃白白
2013/01/23(水) 16:44:43.40はい。
0571デフォルトの名無しさん
2013/01/23(水) 16:54:09.13はい。
(規約如何である事に同意の上ならば)
0572デフォルトの名無しさん
2013/01/23(水) 16:54:49.21エクセルだもん
rowとcolmun だろ
0573デフォルトの名無しさん
2013/01/23(水) 16:57:48.93↑この「そもそも論」って使う?もしくは使う人が身近にいる?
0574デフォルトの名無しさん
2013/01/23(水) 16:58:27.440575デフォルトの名無しさん
2013/01/23(水) 16:59:50.24正直自分もこの話題にはうんざり
0576デフォルトの名無しさん
2013/01/23(水) 17:00:23.46座標y,xになる
で、Cells (y,x)って記述するのは違和感がある
慣れてないものつかってヒューマンエラー起こすくらいなもんだし
直感で理解出来るコードって大事よ
0577桃白白
2013/01/23(水) 17:06:29.77Cellsの1番目の引数が縦を表すことに変わりはないんだから
その違和感をものにしなきゃいけないと思うの。Cellsはたしか
違和感のある記述をしなきゃいけないんだったって記憶しちゃったらいいじゃん。いいじゃん。いいじゃん。
0578デフォルトの名無しさん
2013/01/23(水) 17:08:00.56BBSでうんざりってなにを寝言言ってんだ
0579デフォルトの名無しさん
2013/01/23(水) 17:23:24.65ExcelでRow、Columnと使っているのに何で態々x、yとExcelと異なった表記をしたくなるのか?
Row、Columnなら殆どの人がどこを操作しているのか明快だと思うけど。
名称がRow、Columnとなっているのに、x、yと名前と付けたがる方が違和感がある。
Top、Leftもそのような名称がExcelで使われているんであればそれを使ったほうが自然。
0580桃白白
2013/01/23(水) 17:31:53.07Row, ColumnはRangeオブジェクトを参照するときに使うっしょ。
y, xはインデックスをあらわすときに使うっしょ。だから。
LeftはVBAの文字列操作関数とかぶるから使えないっしょ。
0581デフォルトの名無しさん
2013/01/23(水) 17:37:30.22リアルだと俺より上なんてゴロゴロ居るのに、、、、、
0582デフォルトの名無しさん
2013/01/23(水) 18:03:16.24いるけど
くだらないことにはレスしないんだよ
上級者というのはそういうものだ
0583デフォルトの名無しさん
2013/01/23(水) 18:15:25.75まあ俺の方がお前より上だね
0584デフォルトの名無しさん
2013/01/23(水) 18:42:46.570585デフォルトの名無しさん
2013/01/23(水) 19:06:39.34自分で使うならいい
人に自慢するならいい
人が使ってる手法を否定すんな
グラマとして最低限の作法だろ、それ
どうでもいいことかも知れないけど、言われてるほうからすればお前の主張こそ「どうでもいい」
いや、パイパンのことだけじゃないんだけど
0586桃白白
2013/01/23(水) 19:27:59.36いいたいことはわかるけど、それやると女子のお茶会みたくならない?
えーそれかわいーと言い合うだけになっちゃわない?桃白白は別にいんだけどさそれでも。
桃白白はじっさいかわいいからさ。
0587デフォルトの名無しさん
2013/01/23(水) 19:29:28.13お前も人のこと否定してるし、お前の主張もどうでもいいw
0588デフォルトの名無しさん
2013/01/23(水) 19:31:30.85お前の主張が何なのかイマイチ良くわからんが
>人が使ってる手法を否定すんな
まっとうな批判ってのが世の中にはあるんですが
批判されるのがいやなら一般公開されるような掲示板に書き込みしちゃだめだよ
0589デフォルトの名無しさん
2013/01/23(水) 19:35:22.78ネット掲示板で議論するのなら
人格を始めとする様々な自己属性を
攻撃・否定されるのも当然覚悟のはずだろう。
主張はするけど否定されたくはないというのは
このうえない自己中。
0590デフォルトの名無しさん
2013/01/23(水) 19:37:20.86それだけはないわー
0591デフォルトの名無しさん
2013/01/23(水) 19:57:07.19ここは質問スレ。議論スレじゃない。否定・主張・批判、まったくもって関係ない。
プログラミング法について議論したいならそういうスレに逝け。
命名規則・コーディング規約はプロジェクトや個人で選択するもん。批判・否定レベルの話じゃない。
プログラミング法を否定しちゃいけない。これはプログラマなら魂の奥底から理解できること。
スレ違いです。
次の質問者どうぞ。
0592デフォルトの名無しさん
2013/01/23(水) 20:11:11.05バグの出やすいコードと思われるものに対して何も言わないのも問題だと思うけどね。
というよりコードって人に見せて批判されて書き直して、を繰り返していかないと
いいコードになっていかないものだけど。
魂の奥底なんてコードを書くのに関係ないから。
0593デフォルトの名無しさん
2013/01/23(水) 20:13:19.07IndexをIdxと書くとか
とくに開発の規模が大きくなると、どの単語をどう略するかのルール作りで余計な手間が増えるし
コーディング時のミスも増える
それで問題ないと言ってる人は結局はマイルールを作っちゃってるという意味で1文字変数と大差ない
一人で完成させるプロジェクトなら好きにすればええ
0594デフォルトの名無しさん
2013/01/23(水) 20:45:12.04グローバルな変数しか使えなかった時代の人ですか?
0595デフォルトの名無しさん
2013/01/23(水) 20:55:31.46コーディング規約全否定かよw
0596デフォルトの名無しさん
2013/01/23(水) 22:23:48.62辞書を引かないとわからないような単語を略されるとデバッグ担当が死ぬ
そういう経験が無いとか想像できない奴はまだまだ経験値不足だな
0597デフォルトの名無しさん
2013/01/23(水) 22:29:26.79Bさんの作ったモジュールBではColumn IndexをColIdxと略した
これでバグが出ない方がおかしい
グローバルじゃないからこそ、こういうことが起きるわけで
0598デフォルトの名無しさん
2013/01/23(水) 22:32:29.65一文字変数も同じレベルだが何か?
0599デフォルトの名無しさん
2013/01/23(水) 22:33:19.51見渡せないほどでかいスコープに変数公開してるからでしょ?
宣言と使用箇所が近ければそんな風に変数がどんな役割か見失ったりしないよ?
スコープに応じて変数名の長さ変えるとか今は常識だよ?
プログラミング向いてないんじゃない?
0600デフォルトの名無しさん
2013/01/23(水) 22:35:57.23大きいプロジェクトなのにレビューしないのかよw
そういう省略はレビューで思いっきりNGになるんだが。
0601デフォルトの名無しさん
2013/01/23(水) 22:37:47.49この程度の常識を知らないやつはコード書く資格なし
0602デフォルトの名無しさん
2013/01/23(水) 22:41:16.73理想論だな
規約をきちんと作ればいい、レビューすればいい、それで解決できれば誰も苦労しない
そういう事務的な作業を増やさない工夫のが重要
0603デフォルトの名無しさん
2013/01/23(水) 22:42:56.83まあここまで俺の自演だけどな)
0604デフォルトの名無しさん
2013/01/23(水) 22:48:07.45故意でも過失でもルールを破る奴が増える、そのチェックにコストがかかる
無理にでも質を維持すると生産性が落ちる
迫る納期、辞めてく同僚
コーディング能力と人間性は比例しない
どんだけ金を積んでも理想の人材なんか決して集まらない、そもそも金なんか積めない
それでも作らなきゃいけない
さあどうする
結論、マ板へ行け
0605デフォルトの名無しさん
2013/01/23(水) 22:55:58.170606デフォルトの名無しさん
2013/01/23(水) 22:57:15.060607デフォルトの名無しさん
2013/01/23(水) 23:01:08.740608デフォルトの名無しさん
2013/01/23(水) 23:01:42.89逆でしょ。
規約、レビューなしのほうが理想論。
0609デフォルトの名無しさん
2013/01/23(水) 23:05:12.83省略否定派はいないと思うが。
一文字変数じゃ省略しすぎと言ってるだけ。
極論過ぎんだよ。
0610デフォルトの名無しさん
2013/01/23(水) 23:05:36.580611デフォルトの名無しさん
2013/01/24(木) 01:31:25.89お前も極論すぎないか?なんでもかんでも1文字にしろとはいってないだろ
(VB以前のBASICにはそういう高速化テクニックもあったんだが)
重要でないループインデックスのi,j,kぐらいは、BASICの常識として通用するんじゃね
0612デフォルトの名無しさん
2013/01/24(木) 01:59:51.73気持ちいいぞ
0613デフォルトの名無しさん
2013/01/24(木) 08:48:25.69その考えがバグにつながると言っているのだが。
コードを書けば書くほどバグが出るからといって、省略しすぎるのも問題。
BASICでは常識なのかもしれないけど、今じゃ悪習だし、そもそもBASICとVBAって全く違う。
マシン語ならコンピュータが理解できればいいから別に気にしない。
VBAが優れているかどうかの話は別にして、仮にも高級言語なんだから
人間が理解できるように書こうという姿勢が見られないんだよね。
0614桃白白
2013/01/24(木) 09:54:51.62じゃあ何か実装してみてよ。
桃白白のバブルソートよりわかりやすいバブルソートが書ける?
重要ではないループの変数名を長くして何かわかりやすくなる?
お前が言っているのは机上の空論どころか騎乗の空論だよ。お馬さんに
乗ってパカパカやってるだけだよ。
0615デフォルトの名無しさん
2013/01/24(木) 09:58:15.27すでに599でも言及されているけど、
変数のスコープが十分に狭ければ一文字変数であってもぜんぜん問題ない
そして611は変数名を全部一文字にすることを提唱しているわけでもない。
結局のところ変数名というものは短くて良いものもきちんとしたほうが良いものも
両方あるわけでその線引きはバランスの問題としか言いようが無い。
0616デフォルトの名無しさん
2013/01/24(木) 10:20:39.55次の方どうぞ w
0617デフォルトの名無しさん
2013/01/24(木) 10:32:06.24久しぶりにしか見ないんなら、またしばらく来るなよ。
0618デフォルトの名無しさん
2013/01/24(木) 11:13:25.520619デフォルトの名無しさん
2013/01/24(木) 11:14:11.74早とちり程度なら可愛げもあるが……
脳内で悪印象を付与して再構築、妄想レスが多すぎる
お前らの反応コード組んだプログラマ読んでこい、どうせメリケンなんだろ
0620デフォルトの名無しさん
2013/01/24(木) 12:55:53.21マジで理解できない
0622デフォルトの名無しさん
2013/01/24(木) 13:19:32.10コードって言ってるんだから、それより下位の人工恥能を意味してるんだろうなあ
0623デフォルトの名無しさん
2013/01/24(木) 13:31:45.28おまえもか・・・
君と>>619は
自分の文章力について少し反省したほうが良いぞ
まずは新聞を毎日きちんと読むとか、
そういう習慣をつける事から始めてみなよ
0624デフォルトの名無しさん
2013/01/24(木) 13:41:04.25真に受ければ不快な内容だが、そこそこ上手いこと言ってるし
というか>>619に「うっせぇ、氏ね」とか悪態つくならまだしも
理解できないとか意味不明とか言っちゃうと、
自分のリテラシーの無さを暴露してるだけになっちゃう気がする
とか書くと俺が>>619本人の自演扱いにされそうだなw
0625デフォルトの名無しさん
2013/01/24(木) 13:48:54.430626エスパー君登場
2013/01/24(木) 13:54:17.21補完: お前らのレスはできの悪い人工無能レベルだ)
お前らの反応コード→そのお前らのレスを自動生成する人工無能のアルゴリズム
組んだ奴→を書いた奴
読んでこい→呼んでこい
どうせメリケンなんだろ→どうせ日本人じゃ無いんだろ(だから程度低いレスなんだ)
0627デフォルトの名無しさん
2013/01/24(木) 13:56:43.85何かの流行なの?
0628デフォルトの名無しさん
2013/01/24(木) 14:03:53.830629デフォルトの名無しさん
2013/01/24(木) 14:04:40.58ああいう(>>619や>>622のような)不完全な日本語を理解できたり
(もっとも、理解出来ると思っているだけなのかもしれない)
エスパーしたりすることが日本語の読解力だと思っているなら
それは大きな間違いだよ
0630桃白白
2013/01/24(木) 14:06:54.77桃白白最近気づいたんだけどさ、漫画って句読点がないんだよね。
ワンピースやナルト、比較的文字数が多い名探偵コナンも句読点がない。
そうなるとさ、句読点ていらないんじゃね。
VBAでも変数はDimで宣言されてなくても使えちゃったりするじゃん。
むしろロジックと関係ないという意味でDimもAsも飾りみたいなものじゃん。
なくてもいいじゃん。
0631デフォルトの名無しさん
2013/01/24(木) 14:12:01.880632デフォルトの名無しさん
2013/01/24(木) 14:18:28.94Option Explicitくらい付けろ。
バグの元だ。
0633デフォルトの名無しさん
2013/01/24(木) 14:23:11.14いや、宣言は強制しといたほうが良いだろ
他人の組んだコードのメンテ作業をすると、
変数を宣言せずに使ってて、変数名間違ってて別の変数扱いになってるとか
そういうバグは何度か見た経験があるよ
あと、変数の型指定もそれ自体が変数の意図を表してたりするから
出来れば適切な型指定を心がけたほうが見やすいコードになると思う。
0635デフォルトの名無しさん
2013/01/24(木) 14:37:16.770636デフォルトの名無しさん
2013/01/24(木) 15:13:46.860637デフォルトの名無しさん
2013/01/24(木) 15:22:08.54スレ違いという自分の指摘を無視されたのが気に入らないのか
0638初心者
2013/01/24(木) 15:28:22.57VBAにinputbox関数が二つありますよね?あれって厳密にどう違うんでしょうか?
inputboxメソッドといわれるものはアプリケーションオブジェクト(エクセルというオブジェクト)
の関数(メソット)ですよね。じゃーもう一つのinputbox関数そしてその他の
msgboxや、range関数はなんのメソッドなのでしょうか?何か上のオブジェクト
はあるんでしょうか?なんか見当違いの質問だったらすいません。
0639デフォルトの名無しさん
2013/01/24(木) 15:29:37.47ここのスレタイも読めない白痴か、お前は
0640デフォルトの名無しさん
2013/01/24(木) 15:38:10.93違うのかもしれないけどw
0641デフォルトの名無しさん
2013/01/24(木) 16:10:55.000642デフォルトの名無しさん
2013/01/24(木) 16:25:50.91スレ違いか否かと、くだらないか否かは別問題だよ
なのに、なんでくだらないということにしたいの?
0643デフォルトの名無しさん
2013/01/24(木) 16:45:50.74流石だな
0644デフォルトの名無しさん
2013/01/24(木) 16:53:15.89じゃあお前が答えてやれよ
0645デフォルトの名無しさん
2013/01/24(木) 16:54:37.48ググレカス!
0646デフォルトの名無しさん
2013/01/24(木) 17:04:38.10そんな長い文章書く前に、どうしてググらないのかなぁ。
「VBA input 関数 メソッド」で、一番上のリンクに答えがあるのに。
0647デフォルトの名無しさん
2013/01/24(木) 17:13:53.32http://toro.2ch.net/test/read.cgi/tech/1342087380/
なんてのもあるけど、半年で171レスしかないよね
分ける必要なんかやっぱなかったね
スレ違い原理主義者が分けたんだっけか
0648デフォルトの名無しさん
2013/01/24(木) 17:17:11.16それは638への適切な答えではないと思う。
あそこに書いてあるのは使い方の違いであって
そもそも関数とメソッドの違いってなんだ?という質問への答えではない
0649デフォルトの名無しさん
2013/01/24(木) 17:20:09.88Application.InputBoxメソッド
Applicationのメソッド、つまりエクセルの組み込み機能
InputBox関数
VBAに組み込みの関数
MsgBox
VBAに組み込みの関数
Range
Rangeは関数じゃない。エクセル組み込みの「何か」のメソッド
何かを指定しない場合はActiveSheetだと思っといてよい(本当は違うけど)
0650デフォルトの名無しさん
2013/01/24(木) 17:26:53.090651デフォルトの名無しさん
2013/01/24(木) 17:38:42.41そもそもの質問は関数とメソッドの違いについてではない
まあ質問者がその違いを把握してるとは思えないが
広義な関数は、0個以上の引数を与えて1個または0個の値を返すのが関数
そういう意味ではメソッドも関数
狭義な関数はVBAで定義された関数でいいんじゃないかな
>>649ではそういう意味でRangeは関数ではないと言ってる
もとの質問はInputBoxは2種類あるけど、どこで定義されててどう違うんだ?
MsgBoxやRangeはどこで定義されてるんだ?って質問
InputBoxが関数かメソッドかは大した違いではない
0652デフォルトの名無しさん
2013/01/24(木) 17:43:02.290653デフォルトの名無しさん
2013/01/24(木) 17:50:55.89プロパティは変数のほうがしっくりくるけど。
0654648
2013/01/24(木) 17:51:19.95いやあのね、646が言ってるリンク先って
多分OfficeTANAKAのここなんだけど
http://officetanaka.net/excel/vba/tips/tips37.htm
ここではInputBoxについてメソッドと関数の二つを紹介してるの
おそらく638も存在自体は分かってて
その根源的違いについて聞いてる質問だと思ったんだよね。
0655デフォルトの名無しさん
2013/01/24(木) 17:52:34.70あれは関数というより変数じゃないだろうか
0656デフォルトの名無しさん
2013/01/24(木) 17:54:44.31なんかウザイわ、お前
0657デフォルトの名無しさん
2013/01/24(木) 17:55:22.53Rangeプロパティは変数なのか?
0658デフォルトの名無しさん
2013/01/24(木) 17:59:24.79その根本的な違いがメソッドか関数かだと思ってるならお前も解ってない
メソッドも広い意味では関数だからな
エクセルに組み込みの関数(メソッド)なのか、VBAに組み込みの関数なのかの差
VBAはエクセル専用の言語ではないって前提をまず理解しないと
0659デフォルトの名無しさん
2013/01/24(木) 18:01:11.72くだらん
0661デフォルトの名無しさん
2013/01/24(木) 18:18:55.21これを見る限り変数に見えるけど。
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.range_properties(v=office.11).aspx
0662デフォルトの名無しさん
2013/01/24(木) 18:26:44.67Range型の変数相当だと思っていいんじゃね
まあ、プロパティは、
値をセットするメソッド(setter)
値を取得するメソッド(getter)
値を保存するフィールド
の三位一体だからな
ただ、プロパティにするかメソッドにするか考えたときに
値(状態)を保存するものはメソッドよりプロパティがふさわしいという原則を考えると
プロパティは変数のようなもの、と考えるのが妥当かと
0663デフォルトの名無しさん
2013/01/24(木) 18:30:53.73> 単一のセルまたはセル範囲を表す Range オブジェクトを取得するには、Range(arg) プロパティを使用します。
> 引数 arg には範囲の名前を指定します。
変数って引数を与えるのか?
0664662
2013/01/24(木) 18:31:10.55ってふと思ったんだが
Rangeプロパティってどっかにあるか?
あったとしたら、RangeメソッドかRange型の間違いじゃないか
0665662
2013/01/24(木) 18:49:06.31確かにプロパティになってるな(この辺は大昔にすったもんだあった気がしたが)
Range(arg)はRange._Default(arg)の省略
変数が直接引数をとってるわけではない。デフォルトプロパティが引数をとってるだけ
Dim r As Range
Set r = Range("A1:D4")
MsgBox r(1, 1).Value
ちゃんと動くだろ。でもrが引数をとってるわけじゃない
0666初心者
2013/01/24(木) 19:39:52.32>>654
正解です。グーグルである程度調べました。
しかし中地半端にオブジェクト指向型言語ををしっている僕としては
その明確にどのように動作しているか?仕組みというものが気になったんで
す。
>>649
あ、なるほど。
・・・つまり、applicationメソッドということはそのエクセルのソフトに
依存して、エクセルソフトの機能も使って実現してるということですね?
VBAの組み込みはVBの派生みたいな感じで?あくまでVB側の関数を派生
したということで。(簡単にいうと)ですよね?
>>651
どうもありがとうございます。
そういう質問ですね。
よく僕の質問は意図しない答えが返ってこない場合が多々ありますが。
(現実にも)
0667デフォルトの名無しさん
2013/01/24(木) 19:47:09.39とりあえずオブジェクトブラウザの使い方を覚えろ
F2で立ち上がる
それで調べれば何のメンバかはすぐわかる
0668初心者
2013/01/24(木) 19:52:28.91ほんとだ。こんなところに色々でてるんですね。
調べてみます。
ありがとうございます。
0669デフォルトの名無しさん
2013/01/24(木) 21:54:58.12Excel 2007 です。
http://hamachan4.exblog.jp/6405335/
このサイトを参考にユーザーフォームに動画を張り付けたのですが
再生されません。再生ボタンをクリックしても再生されませんでした。
ローカルウィンドウで動画のURLは指定されているのを確認しています。
何か対策はありますか?
0670デフォルトの名無しさん
2013/01/24(木) 21:59:24.23Dim hFso As FileSystemObject
On Error GoTo ErrorHandler
ReDim strPathArrey(0)
strFilePath = "D:\動画\"
strKeyWord = Left(UserForm2.TextBox1, 7) 'UserForm2より図番を取得
Set hFso = New FileSystemObject
m_FileIdx = 0
Call fncmovFileSearch(hFso.GetFolder(strFilePath), True)
For m_FileIdx = 1 To UBound(strPathArrey)
Mov(m_FileIdx) = strPathArrey(m_FileIdx) 'FilePathを格納
Next m_FileIdx
' Mov(m_FileIdx) = strPathArrey(m_FileIdx)
ErrorHandler:
If Err.Number = 76 Then
MsgBox "動画写真が見つかりませんでした。" & Chr(13) & "動画を撮影し、所定フォルダに登録して下さい。", 48, "動画未登録"
Else
Resume Next
End If
Set hFso = Nothing
End Sub
0671デフォルトの名無しさん
2013/01/24(木) 21:59:54.79Dim hFile As File
Dim hSubFolder As Folder
For Each hFile In p_Folder.Files
With hFile
If LCase$(.Name) Like "*wmv" Then
If InStr(.Name, strKeyWord) > 0 Then
m_FileIdx = m_FileIdx + 1
ReDim Preserve strPathArrey(m_FileIdx)
strPathArrey(m_FileIdx) = .Path
End If
End If
End With
Next hFile
If p_SubFolder Then
With p_Folder
If .SubFolders.Count > 0 Then
For Each hSubFolder In .SubFolders
DoEvents
Call fncmovFileSearch(hSubFolder, p_SubFolder)
Next
End If
End With
End If
Set hSubFolder = Nothing
End Function
0672デフォルトの名無しさん
2013/01/24(木) 22:00:29.01Call MovSearch
UserForm3.WindowsMediaPlayer1.URL = Mov(0)
UserForm3.WindowsMediaPlayer1.Height = 290
UserForm3.WindowsMediaPlayer1.Width = 330
UserForm3.Show (0 - vbModeless)
End Sub
長いですがコードの一部です。
0673デフォルトの名無しさん
2013/01/24(木) 22:01:57.69後入れしたMPCとかGOMとかRealPlayerではなく、Win標準のWindowsMediaPlayerで
0674デフォルトの名無しさん
2013/01/24(木) 22:04:56.16確認しています。
元々Windousに入ってたSumple動画で試しました。
0675デフォルトの名無しさん
2013/01/24(木) 22:11:44.730676669
2013/01/24(木) 22:17:47.79>元々Windowsに入ってたサンプルムービーで試しました。
が正解です。
0677デフォルトの名無しさん
2013/01/24(木) 23:03:51.61とりあえず動作しないミニマムコード作ってから質問してくれ
0678桃白白
2013/01/24(木) 23:05:25.55すくなくとも提示されたコードではMovの0番目にURLがセットされないっすよ。
0679デフォルトの名無しさん
2013/01/24(木) 23:16:02.16まさかと思うけど、URLセットしたあとちゃんと「再生」してる?
Call UserForm3.WindowsMediaPlayer1.Controls.Play
0680669
2013/01/24(木) 23:16:49.98すみません
UserForm3.WindowsMediaPlayer1.URL = Mov(0)
を
UserForm3.WindowsMediaPlayer1.URL = Mov(1)
に変えたら出来ました。
初歩的なミスでおはずかしい
0681デフォルトの名無しさん
2013/01/24(木) 23:19:39.19グロ変数宣言して、mov(1)にしたら動いたよ
うちにDドライブがない都合でちょこちょこ修正させてもらったけど動作は確認できた
ttp://codepad.org/m4zgtVcV
0682デフォルトの名無しさん
2013/01/24(木) 23:20:46.81ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
0683669
2013/01/24(木) 23:39:32.76動画をフォームのサイズに合わせて表示する方法はないでしょうか?
画像でしたらPictureSizeModeで設定できるのですが、動画では
UserForm3.WindowsMediaPlayer1.stretchToFit = True
でもできませんでした。
なにか設定項目があるのでしょうか?
0684デフォルトの名無しさん
2013/01/25(金) 01:53:29.78話はそれからだ
0685デフォルトの名無しさん
2013/01/25(金) 02:00:45.59メディアプレイヤーコントロールのサイズをフォームのサイズに合わせるだけじゃないの?
0686デフォルトの名無しさん
2013/01/25(金) 03:00:31.99stretchToFitは動画をプレイヤーに合わせる
プレイヤーをウィンドウに合わせるにはResizeイベントの中で自分で幅と高さを設定する
0687デフォルトの名無しさん
2013/01/25(金) 03:08:34.66数独(ナンプレ)の回答を導き出すExcel VBAプログラムを作るとしたら、
多次元配列などを駆使ししてコードだけでやりますか?
Excel のセルを利用しますか?
0688デフォルトの名無しさん
2013/01/25(金) 03:28:34.24セルは問題の入力と答えの表示だけに使う
処理は配列の中だけでやる
0689デフォルトの名無しさん
2013/01/25(金) 05:23:43.360690デフォルトの名無しさん
2013/01/25(金) 07:51:51.57具体的にどう記述したらいいですか?
色々試しましたがぴんときません
0691デフォルトの名無しさん
2013/01/25(金) 08:20:29.87回答者がお前がやったことを回答してきたらどうするんでしょw
0692デフォルトの名無しさん
2013/01/25(金) 11:34:38.69○環境:WinXP(SP3) + Excel2010Personal
○やりたいこと:
セルを右クリックしたときに、標準のポップアップメニューに独自のメニュー項目を追加してる。
セルの位置や値などの条件から、メニュー項目の追加・削除を制御している。
セルを右クリックしたときに呼び出されるプロシージャが2つあり、どちらも呼び出される。これは問題ない。
オブジェクト:WorkSheet
プロシージャ:BeforeRightClick
関数名:Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
オブジェクト:WorkBook
プロシージャ:SheetBeforeRightClick
関数名:Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
しかし、「アプリケーションキー」をクリックしたとき、どちらの関数も呼び出されない。
よって、ポップアップメニューの項目の制御ができない
(正確には、直前に右クリックしたときのメニュー項目となる)
「アプリケーションキー」をクリック後、どちらかのプロシージャを呼び出す手順をご教授ください。
なお「アプリケーションキー」クリックしてポップアップメニューの項目を選択する「マクロの記録」も実行しましたが、
作成されたマクロ関数は処理が無くてコメントだけでした。
0693桃白白
2013/01/25(金) 13:30:56.33関数を用意してアプリケーションキーが押されたときにその関数が呼ばれるようにして
その関数でWorksheet_BeforeRightClickで行われる処理が呼ばれるようにしちゃうのはどう?
Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const VK_APPS = &H5D
Sub Test()
Do
If GetAsyncKeyState(VK_APPS) <> 0 Then
Call APPS_KeyDown
End If
Sleep 32
DoEvents
Loop
End Sub
Sub APPS_KeyDown()
RightClickProcess
End Sub
Sub RightClickProcess()
MsgBox "taopaipai"
End Sub
0694デフォルトの名無しさん
2013/01/25(金) 13:34:50.640695デフォルトの名無しさん
2013/01/25(金) 13:37:09.35今推されてるキーがアプリケーションキーかどうかを調べる方法がわからないんじゃなくて、
アプリケーションキー入力をトリガーとする方法がわからないのが問題なんだよ。
Excelの機能の範囲では、Worksheet_SelectionChange()で毎回変更するくらいしか思いつかないけど、
そうするとカーソル移動なんかが重くなるのかな。
まあ、「アプリケーションキー入力での動的メニュー変更には対応しない」という仕様であるということに
するのが、一番良いような気がする。
0696桃白白
2013/01/25(金) 13:43:23.97____
/ \
/ _ノ ヽ、_ \ そんなこと言われても
/ (●) (●) \ どうすりゃいいのさ
| (__人__) |
\ ` ⌒´ /
/´ `\
/ / l l .
__l l_.[] _____/_/__
\, ´-'ヽ
ヾ_ノ
|
|
|__ コロ・・・・
_____\ コロ・・・・
()__)」
0697デフォルトの名無しさん
2013/01/25(金) 13:49:07.500698デフォルトの名無しさん
2013/01/25(金) 13:50:51.63あとはサブクラス化ってVBAでも出来たっけ?
まあVB6でも鬼門なくらいだから、出来たとしてもやらない方がいいとは思うけど
0699デフォルトの名無しさん
2013/01/25(金) 14:54:53.94キーフック出来るから
0700デフォルトの名無しさん
2013/01/25(金) 15:00:36.800701デフォルトの名無しさん
2013/01/25(金) 18:30:49.820702デフォルトの名無しさん
2013/01/25(金) 18:40:12.960703デフォルトの名無しさん
2013/01/25(金) 18:42:19.830704デフォルトの名無しさん
2013/01/25(金) 20:58:57.53onkeyではアプリキー指定できないけど、Shift+F10トラップすると
アプリキーも拾ってくれるんだね
これで解決か
0705デフォルトの名無しさん
2013/01/25(金) 21:42:29.00アクティベートしている状態でないといけないか、それともアクティベートしなくてもいいか、
その基準みたいなものはありますか?
0706デフォルトの名無しさん
2013/01/25(金) 21:49:05.03操作方法とかではなく仕様についてはメーカーに聞くのが基本なので
MSに問い合わせてください
0707デフォルトの名無しさん
2013/01/25(金) 21:54:18.46セルやシートやブックを対象に何かを行うときはアクティベートしなくても行える。
基準なんて聞いたことがない。
0708デフォルトの名無しさん
2013/01/25(金) 21:54:18.950709デフォルトの名無しさん
2013/01/25(金) 22:08:20.06最近のバージョンのことは知らん
0710デフォルトの名無しさん
2013/01/25(金) 22:35:14.130711デフォルトの名無しさん
2013/01/25(金) 22:50:29.92Dim 〜
は、どこでするのが吉ですか?
プロシージャ内で使うローカル変数なら
その変数を初めて使用する直前?
それともプロシージャの先頭?
0712デフォルトの名無しさん
2013/01/25(金) 22:55:39.44コードが冗長になるようなら、変数を使用するときに再度コメントで説明すると吉
0713桃白白
2013/01/25(金) 23:05:28.38桃白白はバラバラかな。関数の最初のところでまとめて宣言するときもあるし
必要になった段階で宣言するときもある。
0714デフォルトの名無しさん
2013/01/25(金) 23:56:46.32プロシジャより狭いスコープの変数宣言は出来ないので、使う直前とか止めた方が良いというのが俺の意見
0715デフォルトの名無しさん
2013/01/26(土) 00:12:00.96だから先頭で一括が推奨される
0716桃白白
2013/01/26(土) 00:21:39.05でもさ、見た目が気になるときってあるじゃん。これあとのほうで
使う変数なんだけどみたいな。ほかのところで使われたらおかしいんだけどみたいな。
最初のところで全部宣言しちゃったらそこんとこわかりづらくなるんだけどみたいな。
そんなときってあるじゃん?だからさ、ケースバイケースの桃白白方式が大吉だと思うんだよね。
0717デフォルトの名無しさん
2013/01/26(土) 00:22:34.89引数が面倒・・・
0718デフォルトの名無しさん
2013/01/26(土) 02:20:56.190719デフォルトの名無しさん
2013/01/26(土) 06:16:51.91変数の宣言が先頭にあったり、途中にあったりすると書き方の統一性が取れていない。
こういうのがあると他の部分も統一取れていないグチャグチャのコードなのか?と疑う。
精神的に無駄に疲れる分よくないな。
0720デフォルトの名無しさん
2013/01/26(土) 07:00:22.530721デフォルトの名無しさん
2013/01/26(土) 07:18:16.58その「後の方」って表現が出るほど、一つのプロシージャにだらだらとコード書かずに
細かくプロシージャ分けて、読解性、視認性、メンテナンス性を上げていこうって話だよ
まあそういうのは大規模なプロジェクトでより活きてくるから、桃白白にはまだ
理解の及ばない域かもしれないけど覚えて置いた方がいい
0722桃白白
2013/01/26(土) 09:18:14.70なんなの!?性を連呼して、変態。
関数は分ければいいってもんでもないしあえて一つの関数に書くときもあるっしょ。
あっち見てこっち見てさせるよりは一箇所に記述したほうがいいときもあるっしょ。
そんなとき、そんなときなんですよ、変数、関数の最初に宣言しないほうがいいっす。
0723デフォルトの名無しさん
2013/01/26(土) 09:28:26.01{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; 変数、関数の最初に宣言しないほうがいい・・・
ヾ;;;ハ ノ .::!lリ;;r゛
`Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が
,;ぇハ、 、_,.ー-、_',. ,f゛: Y;;f. 俺にもありました
~''戈ヽ `二´ r'´:::. `!
0724デフォルトの名無しさん
2013/01/26(土) 09:34:11.31白濁が納得する理屈や表現を示してあげるまで続きます的な流れ
白濁のどや顔な比喩表現とか面白くなくて逆に面白いから別にいいけどさ
0725桃白白
2013/01/26(土) 09:35:58.80あのころの自分を思い出せ、変数は関数の最初に宣言しないほうがいいんだ。
0726桃白白
2013/01/26(土) 09:40:26.593回読んだら白濁が桃白白のことなんじゃないかと疑問に思えてきたんだけど、
桃白白のことじゃない、問題ない、桃白白はまだやれる。
0727デフォルトの名無しさん
2013/01/26(土) 09:41:52.43後にデメリットの方が大きく過ちだったと気付いたが、両方経験してる俺には君の主張も理解できるが
未だ変数冒頭宣言の有意さに気付いてない君には、一方の利点しか見えていないわけだ
0728桃白白
2013/01/26(土) 09:48:08.09そのおっきいデメリットってなあに?桃白白はケースバイケースという立場だから
立場としてそんなにかわらないと思うけどおっきいデメリットは思いつかない。
0729デフォルトの名無しさん
2013/01/26(土) 09:52:40.83エクセルのブイビーエーな質問スレで話さないといけないんですか?他にふさわしいスレッドはないのですか?
0730デフォルトの名無しさん
2013/01/26(土) 09:54:20.66とりあえず肩の力抜けよ
0731デフォルトの名無しさん
2013/01/26(土) 10:07:01.26パイパンは面白おかしく書いてるが他の人はまじめに書いてるし
エクセルVBAに役に立つ話題だからここでして欲しい
と思う俺は先頭で宣言する派
ってか、途中で宣言するぐらいならそこは別プロシージャにしろと
0732桃白白
2013/01/26(土) 10:15:36.93桃白白超まじめなんだけどー。
関数は変数の宣言場所とは関係なく機能でわけるべきっすよ。
変数を関数の先頭で宣言しないおっきいデメリットって結局なんなの?
よくわかんなかった。
0733731
2013/01/26(土) 10:26:26.73>関数は変数の宣言場所とは関係なく機能でわけるべきっすよ。
その機能というものをひとつのプロシージャあたりひとつに絞って、
それらを組み合わせて全体のプログラムにするってのが
オブジェクト指向の基本的考え方なんじゃない?
デメリットっていうか、
スコープの範囲内で見通せる規模のプロシージャなら
先頭で宣言してなんの問題もないわけで、
途中で宣言しないと分からなくなるような構造って
もっと整理してコンパクトにまとめるべきだと思うんだ。
まぁおれは>>727さんじゃないから
この考えで合ってるかどうか分からないけど
0734桃白白
2013/01/26(土) 10:34:54.59オブジェクト指向はオブジェクト作っちゃいましょってやつだから
関数を定義してそれを呼んじゃいましょというのは構造化プログラミングだろうけど、
わからなくなるかどうかで判断したら開発するときと保守するときで
変わってきちゃうじゃない。開発するときはわかったんだけどーみたいに
なっちゃわない?だから変数の宣言場所と関数の分割単位はわけて考えないとまずいっしょ。
0735おんなのこ
2013/01/26(土) 10:36:33.56きもちょくなってきたゎ
つぎはどぅするの?
0736731
2013/01/26(土) 10:41:08.19>開発するときはわかったんだけどーみたいに
なっちゃわない?
それ多分、途中で宣言するようなプロシージャでこそ起こりうる問題だと思う。
だらだら長いコード書いて最初に宣言した変数が訳わからなくなるのは
宣言した場所が拙いんじゃなくて、そんな長いコード書くのが悪いって考え方なのよ
おれは。
0737桃白白
2013/01/26(土) 10:57:21.91それは長いコードがだめだって話ね。
変数を途中で宣言するとコードが長くなるって思ってるわけね?ああわかった。
じゃあコードが長くならなければ変数を途中で宣言してもデメリットはないってことでいいわけね。
0738デフォルトの名無しさん
2013/01/26(土) 10:58:48.540739桃白白
2013/01/26(土) 11:01:25.55桃白白は関数を機能で分割するべきだって立場だからそれはそうだと思う。
0740デフォルトの名無しさん
2013/01/26(土) 11:03:51.62Excelの個人ファイルみたいなところに保存して
どのWordファイルに対しても実行できるようにしておきたいんですが
Normalに書いたコードが保存できません。
どうすればいいですか?
0741731
2013/01/26(土) 11:51:47.92>変数を途中で宣言するとコードが長くなるって思ってるわけね?ああわかった。
違う、順番が逆
コードが長いから変数を途中で宣言したくなるんだと思ってるの
>じゃあコードが長くならなければ変数を途中で宣言してもデメリットはないってことでいいわけね。
メリット・デメリット って事は俺が言ってるわけじゃないんで
俺に聞かれても答えようが無いけど、
じゃあ逆に変数を途中で宣言するメリットってなんだろうと考えると
多分その変数で処理を行う部分の近くで宣言した方が
その処理の動作が分かりやすい
ってことなんだと思うのね。(違ってたらごめん)
で、最初に戻るわけなんだけど、処理内容が見通せないような複雑なものだったら
それはさらに分割してより単純な処理を組み合わせたもので実現しよう
という考え方を称して「短いコード」とか「長いコード」と言ってるわけですよ。
だからそういうコードならはじめに変数をまとめて宣言しておくことに
なんのデメリットもないし途中で宣言することにもメリットが無いってことです。
0742デフォルトの名無しさん
2013/01/26(土) 12:07:12.840743桃白白
2013/01/26(土) 12:35:21.22機能で関数をくくっていくと関数を分割しても見通しが悪くなるだけの
ときっていうのはあるわけっすよ。そういうときは変数を途中で宣言しちゃったら
いいじゃんっていうのが>>722。関数を短くすればいいだろって言いたいだろうけど、
あっち見てこっち見てとさせるより一箇所に記述しちゃったほうがいいときもあるでしょってわけ。
関数を細分化してコードが短いから関数の最初でもいんだってのにも反対。
たとえばこう書いたとき関数はじゅうぶんに短いけど、fugaの値がおかしいという
例外に対処するときにfugaの宣言位置が使用されるところから離れていると
適切な位置の情報がなくなっちゃうわけ。Elseブロックの中で宣言されていれば
それより前のところで使われてたら記述ミスだって気づけるっしょ。
Function Hoge(arg1, arg2)
If arg1.Condition Then
Set Hoge = Fizz(value, arg2)
Else
Dim fuga
Set fuga = Buzz(arg1, arg2)
Set Hoge = Fizz(value, fuga)
End If
End Function
0744デフォルトの名無しさん
2013/01/26(土) 12:39:41.82ここまでレベル低かったとはw
もうちょっと解ってる奴だと思ってたのに・・・
でも余計に可愛いかもw
0745デフォルトの名無しさん
2013/01/26(土) 12:52:52.57俺だったらそういう時はfuga単体でファンクションプロシージャ作るよ
0746デフォルトの名無しさん
2013/01/26(土) 12:55:10.77dim hensuu() as variant
で宣言して、使うときに増やしてけばいいじゃん
それでいいじゃん
0747デフォルトの名無しさん
2013/01/26(土) 13:00:02.74変数が管理できない上に動作も遅くてメモリも浪費する
良いことなんもない
0748桃白白
2013/01/26(土) 13:01:47.96どう書くのよ?書いてみてよ。書いてごらんなさいよ。
書いて桃白白に教えてくれちゃったらいいじゃんよ。
0749デフォルトの名無しさん
2013/01/26(土) 13:12:15.36どんな化石PC使ってるんだ
ってのと
じゃあエクセル使うなよ
っていう2つのツッコミを思いついた
PC性能なんて年々上がるんだから、エクセルで作る程度のシステムでメモリ気にするなんてほぼ無意味だし
動作なんてよっぽどじゃない限り考える必要ない
そもそも配列で動作重くなるって何よ
コードが複雑になるとかなら判るんだけど
メモリ上一括領域を確保するんだから、早くなるんじゃないの?
0750デフォルトの名無しさん
2013/01/26(土) 13:17:22.85それに近いと思うんだけどさ
各基本型の変数は3つずつぐらい最初から用意しておいて欲しい
参照渡し用の一時変数を先頭に宣言しても見づらいだけ
あとメソッド細分化のデメリットは
あるメソッドの引数追加で呼び出し元が10個あって修正が大変な事がある
0751デフォルトの名無しさん
2013/01/26(土) 13:29:27.76> 呼び出し元が10個
ってほど多用する処理なら、むしろ細分化せずに10カ所に
同じようなコード書いてる場合の方が修正大変だろw
細分化してあれば修正忘れがあってもエラー出るから分かるが
あちこちに点在させてると、修正忘れがあった場合に、
エラー出ずに想定外(修正前)の動作するからややこしいことこの上ない
もうちょっと深く考えてから書かないと恥かくだけだぞ
0752デフォルトの名無しさん
2013/01/26(土) 13:36:26.14そういう時の為にユーザー定義型があるのだが。
0753デフォルトの名無しさん
2013/01/26(土) 13:46:22.76まぁ何事も程々にね
メソッドは前提条件と役割(何をどこまでやるのか)をきっちり定義して作ってかないと
細分化は結果だから下手にやろうとすると俺みたいになっちゃうよ
初心者は無理にやる必要は無いが結論
自分以外が手をいれる環境でもやらない方がいい
0754デフォルトの名無しさん
2013/01/26(土) 13:55:20.63それこそメンドクサイ
データ項目ならいいというか最初からそうするよ
制御用のなんたらフラグだったら?
FugaArgument型に作るの?
オーバーロードの無い言語であんまり無理しちゃダメだよ
0755デフォルトの名無しさん
2013/01/26(土) 14:29:31.14じゃいつやるの?今でしょ。
0756デフォルトの名無しさん
2013/01/26(土) 14:35:56.58別にフラグでも問題ないし。
プロシージャ用にユーザー定義するのも有りだと思う。
勿論そのプロシージャはきちんと機能別に分けられている必要があるけど。
この機能のパラメータという意味でのユーザー定義型だからデータ項目と何ら変わらない。
しかもパラメータが増えても引数が増えるわけではないしね。
0757デフォルトの名無しさん
2013/01/26(土) 14:38:40.160758デフォルトの名無しさん
2013/01/26(土) 14:40:19.72突っ込みどころ満載のコードだなw
0759桃白白
2013/01/26(土) 14:50:12.75その満載の突っ込みどころを披露しちゃいなよ。
できればコードという形が望ましいけれども、
それがめんどうなら文だけでもいいからさ。いっちゃいなユー。パイパイがそれ聞いちゃうからさ。
0760デフォルトの名無しさん
2013/01/26(土) 15:05:14.86一人でそんな事してたら職場で浮いてしまう
>>755先輩のコードなんかすごいけど修正しずらいよな
なんて影で言われてないか?
0761デフォルトの名無しさん
2013/01/26(土) 15:28:20.310762デフォルトの名無しさん
2013/01/26(土) 15:40:26.38機能的に細分化してさ、3つの関数を順番に呼ぶ時
(例1)
intC = funcC(funcB(funcA(paramA), paramB), paramC)
(例2)
intA = funcA(paramA)
intB = funcB(intA, paramB)
intC = funcC(intB, paramC)
どっちの書き方が見やすいかな
引数がもっと多いと、結果を一時変数に入れた方が見た目はスッキリするよね
しかも、intAとintBはここで1回しか使わない
VBAじゃなくてワークシートで関数を書いてる時、入れ子の入れ子でわけわかんなくなってくることがよくある
0763桃白白
2013/01/26(土) 15:56:27.10桃白白は2番だな。2番のほうがいかしてる。
1番は引数のどれとどれが対応するのかわかりづらいし
呼ばれる順番もぱっと見てわかりづらい。行数を減らすことは
できるけれど行数減ってもあまりうれしくない。
0764758
2013/01/26(土) 16:36:46.21こんなふうに書くのがあっさりしてる。
直すところはもっとあるけど。
Function Hoge(arg1, arg2)
Dim fuga
Set fuga = arg2
If Not arg1.Condition Then
Set fuga = Buzz(arg1, arg2)
End If
Set Hoge = Fizz(value, fuga)
End Function
0765デフォルトの名無しさん
2013/01/26(土) 16:39:14.28で、こっちがツッコミ。
サンプルコードだから、それなりに省略しているという背景は抜きにした話。
・引数が値渡しか参照渡しか明示されていないので、
引数を書き換えていいという意図があるのか単に記載漏れなのか判断できない。
ようは設計者の意図が伝わってこない。
・Hogeプロシージャの型が省略されているので何型で返してもいいという判断になる。
プロシージャのコール元で期待している型と違う型が返ってくる可能性が十分にある。
コール元でValiant型の変数で受けて型を特定して変更するのは面倒。
そもそもどんな型が返るのかわからない設計ってまともに設計できてるのか?
・valueの宣言が無い。
・fugaの値のチェックが無い。
fugaの値がおかしいかどうかこの時点で想定できるのならチェックが必要。
fugaの型がわからないからこその例外が発生しそう。
・Ifステートメントの後で処理が追加された場合、処理の修正が増える。
今回の場合は
Set Hoge = Fizz・・・
をIfステートメントの外に出す必要が出てくる。
0766デフォルトの名無しさん
2013/01/26(土) 16:56:58.21> サンプルコードだから、それなりに省略しているという背景は抜きにした話。
そんな突込みして、楽しい?
0767デフォルトの名無しさん
2013/01/26(土) 16:57:48.10その指摘はそれだけ見れば間違ってはないが
もはや議論の中心が何かを見失ってるとしか思えん
そろそろ別の場所でやってくれ
0768デフォルトの名無しさん
2013/01/26(土) 17:02:47.15コンパイラさん?擬人化するなら幼女でお願いします
0769デフォルトの名無しさん
2013/01/26(土) 17:28:06.23暇つぶし。
0770デフォルトの名無しさん
2013/01/26(土) 17:33:39.35>・fugaの値のチェックが無い。
arg1, arg2 のチェックは要らんのか?
突っ込むならもっとちゃんと突っ込めよ…
0771デフォルトの名無しさん
2013/01/26(土) 17:52:33.01おれ、今の会社辞める前に Ctrl + H で片っ端から変数を
Local_Variable_Integer_Temporary_Counter_Level001
系に書き直してから去ることにするわ。
有益な情報をありがとう。
0773デフォルトの名無しさん
2013/01/26(土) 17:58:57.91そんなに悔しかったの?
つーか無職が「今の会社」って・・・w
0774デフォルトの名無しさん
2013/01/26(土) 18:05:24.39誰と勘違いしてんの?
こんなスレあると知らんかったから興味深く読んで、
で、この発想おもしれーなと思ったから書き込んでみただけです。
性格の悪い先輩の洗礼を受けたということで、
大目に見てあげるよ。
0775デフォルトの名無しさん
2013/01/26(土) 18:16:39.220776デフォルトの名無しさん
2013/01/26(土) 18:32:31.690777デフォルトの名無しさん
2013/01/26(土) 18:46:01.530778デフォルトの名無しさん
2013/01/26(土) 18:55:53.790779デフォルトの名無しさん
2013/01/26(土) 19:03:30.11いや、771=774もだが、
それに粘着してるお前も感じ悪いよ
カマ掛けに反応してくれてありがとう(ドヤァ
無職(ドヤァ
絶対友達いない
0780デフォルトの名無しさん
2013/01/26(土) 19:24:25.430782デフォルトの名無しさん
2013/01/27(日) 01:21:13.54処理直前にDimしてるぅ!プークスクス
まあ、読みやすいっちゃ読みやすい。
0783デフォルトの名無しさん
2013/01/27(日) 06:15:10.830784デフォルトの名無しさん
2013/01/27(日) 07:34:20.450785デフォルトの名無しさん
2013/01/27(日) 07:49:56.21すまんが童貞は引っ込んでろ。
0786デフォルトの名無しさん
2013/01/27(日) 14:39:13.300787デフォルトの名無しさん
2013/01/27(日) 18:18:43.340788デフォルトの名無しさん
2013/01/28(月) 01:11:43.060789デフォルトの名無しさん
2013/01/28(月) 01:31:05.38最近のスレの出来事を三行でおなしゃす
0790デフォルトの名無しさん
2013/01/28(月) 02:18:21.34別に
知らなくても
なんの影響もない雑談
0791デフォルトの名無しさん
2013/01/28(月) 11:01:49.58これは、そう書ける言語ならいつでもそうする。
そうしない派も、
Dim var as Long = 100
とか、
Dim obj as Class1 = new Class1("abc")
とか書けるなら、必要なときに定義しようと思うんじゃ無いかな。
0792デフォルトの名無しさん
2013/01/28(月) 12:12:46.17逐一宣言の方が書いてる時は書きやすいから、使い捨てのVBSとかだと
プロシージャ分けもせず、先頭からズラズラ書いて必要な時に宣言したりもするけど
更新やメンテナンスしながら使うものだと、安直な書きやすさより
後々のメンテナンス性を考慮したいからなぁ
0793桃白白
2013/01/28(月) 12:41:32.00関数の最初に変数を宣言することでえられる保守しやすい性質て具体的にどういうものなの?
桃白白はそんなものないと思ってるの。
0794デフォルトの名無しさん
2013/01/28(月) 12:51:18.82頑張れ桃白白!、負けるな桃白白!、闘え僕らの桃白白っ!!
0795桃白白
2013/01/28(月) 12:54:40.20うん、桃白白はその境地にたっしてないけど、お前がそれを説明できるレベルにたっしてるのであれば
それを教えちゃってよ。桃白白にささやいてくれてよ。叫んでくれてもかまわない。桃白白のすてきな
形の耳で聞いちゃうからさ。いっちゃいなよ。聞いちゃうからさ。
0796デフォルトの名無しさん
2013/01/28(月) 12:58:37.120797デフォルトの名無しさん
2013/01/28(月) 13:26:24.33> 逐一宣言の方が書いてる時は書きやすいから
先頭宣言方式は、書きやすいと言うこともなく、宣言と使用する場所が離れて読みやすいということもなく、
コードを数行追加するときに新たに変数が必要になったときなどに、離れた場所に追加しなくてはならず、
コードの一部分をリファクタリングするとき、変数を削除し忘れて「unused variable」になったりする。
さらに初心者は、長い大きな関数を書きがちで、関数先頭に10個20個の変数がずらずら並んでたりする。
逐一宣言方式のデメリットってなんかある?
0798デフォルトの名無しさん
2013/01/28(月) 13:28:45.08メソッド先頭にまとめてやるなんてことができないはずだが。
0799デフォルトの名無しさん
2013/01/28(月) 13:29:51.63昔の自分を見ているようで微笑ましい
0800デフォルトの名無しさん
2013/01/28(月) 13:35:33.65何の言語を使ってるのか言ってごらん。
0801デフォルトの名無しさん
2013/01/28(月) 13:39:16.100802799
2013/01/28(月) 13:39:35.330803デフォルトの名無しさん
2013/01/28(月) 13:49:25.92なでしこっていいよね
0804デフォルトの名無しさん
2013/01/28(月) 13:51:23.540805デフォルトの名無しさん
2013/01/28(月) 13:55:58.42Code Completeは読んだ?
Code Completeでは、明確に「変数は最初に使用する場所の近くで初期化する」のが推奨されている。
自身を持って、今の方針でやってけばいいよ。
なお、http://likealunatic.jp/2011/06/js_variable.php にちょこっとCode Completeの内容に言及してる。
0806桃白白
2013/01/28(月) 14:10:56.10たぶん読んでない。読んだとしてもかんぜんに忘れてる。1ミリも覚えてない。
リンク先を読んでみるわ。
0807デフォルトの名無しさん
2013/01/28(月) 14:32:35.33言い方を変えると、「途中で変数を宣言したくなる場所」ってのは、「そこでモジュールを分割すべき場所」なんだよって
0808デフォルトの名無しさん
2013/01/28(月) 14:42:36.90途中で変数を宣言したくなる場所はどこかって話じゃ無くて、変数を宣言する場所をどこにするのが
良いのかって話なんだが。
0809デフォルトの名無しさん
2013/01/28(月) 14:53:27.17まずは>>805のリンクを読め
0811デフォルトの名無しさん
2013/01/28(月) 15:08:21.66トップに変数やコードの目次と説明書いて
変数宣言行を自動追加すりゃいいじゃん
じゃん
0812デフォルトの名無しさん
2013/01/28(月) 15:09:20.23タオパイじゃないからね
0813デフォルトの名無しさん
2013/01/28(月) 15:14:24.06はて。
>>805=>>808=俺なんだが。
0814デフォルトの名無しさん
2013/01/28(月) 15:35:43.080815692
2013/01/28(月) 15:43:53.34皆様のアドバイスにより、対処できましたことを報告します。
ご助力ありがとうございました。
対処方法は、ご指摘にありましたとおり、アプリケーションキー(Shift+F10)をOnKeyでフックして、
そのフックされたプロシージャでは、メニュー項目を制御した後、ポップアップメニューを表示する手段を採りました。
○ThisWorkbook
Private Sub Workbook_Open()
Application.OnKey "+{F10}", "Module1.HogeHoge"
End Sub
○Module1
Public Sub HogeHoge()
'追加したポップアップメニュー項目を制御する処理
xxx
'ポップアップメニューを表示する
CommandBar.CommandBars("Cell").ShowPopup
End Sub
Private Sub Auto_Close()
Application.OnKey "+{F10}"
End Sub
いろいろとご助力いただき勉強になりました。ありがとうございました。
0816デフォルトの名無しさん
2013/01/28(月) 16:24:43.79ほのめかしだけじゃ会話は続かないよ。
何を理解していないといいたいの?
0817デフォルトの名無しさん
2013/01/28(月) 16:41:41.150818デフォルトの名無しさん
2013/01/28(月) 18:13:08.96まさか本気じゃないよね?
0819デフォルトの名無しさん
2013/01/28(月) 23:26:25.34たとえばコードを追加すような場合
新しい変数を宣言して使いたいときに、そのプロシジャ全てをチェックする必要がある
宣言をまとめておけば、そこをチェックするだけでその変数が使われてるかどうか解る
とりあえずより狭いスコープで変数が定義できる別の言語の話と一緒にはするな
変数のスコープが見通せるような範囲で納められるなら、その場で宣言で良いさ
0820デフォルトの名無しさん
2013/01/28(月) 23:26:53.670821デフォルトの名無しさん
2013/01/29(火) 00:02:46.310822デフォルトの名無しさん
2013/01/29(火) 00:08:04.45http://www.youtube.com/watch?v=iKav_BCb6Zs
0823デフォルトの名無しさん
2013/01/29(火) 00:18:15.55まあそこまで大きなプロシージャを作らないこったな
理想論ではあるが
0824デフォルトの名無しさん
2013/01/29(火) 00:38:25.64検索機能使えよ…
0825デフォルトの名無しさん
2013/01/29(火) 01:22:37.430826デフォルトの名無しさん
2013/01/29(火) 01:58:30.17チェックってビルド時にわかるだろ?
0827デフォルトの名無しさん
2013/01/29(火) 05:20:03.34みたいな涙ぐましい書き方する人おらんのー?
0828デフォルトの名無しさん
2013/01/29(火) 05:35:49.30例えば職場の人に、自分の書き込みばれたとこ想像してみ?
え?あの人が?!って驚かれるの?
それとも、あーやっぱりwwwってなるの?w
もうそんな低レベルな煽りをする年齢でもないだろ。
お前と同じ年で子どもいる奴だっているのに。
0829デフォルトの名無しさん
2013/01/29(火) 07:59:17.150830デフォルトの名無しさん
2013/01/29(火) 09:24:10.692chでマジレスとかw
0831デフォルトの名無しさん
2013/01/29(火) 10:38:04.14VBA以外で使ってる言語と、その言語で関数/メソッド先頭に固めて変数宣言/定義してるか教えてくれ。
最近の言語であれば、大抵の人は変数を逐次宣言/定義する派だと思うが、宣言をまとめたいとは思ってないと思うよ。
> とりあえずより狭いスコープで変数が定義できる別の言語の話と一緒にはするな
何と何を一緒にするなと?
より狭いスコープで変数が定義できる別の言語って何?
0832デフォルトの名無しさん
2013/01/29(火) 10:45:55.33Dim i, j as Long
とかやっちゃう人
0833デフォルトの名無しさん
2013/01/29(火) 11:29:22.80先頭に移動しても行は増えないだろ?
コピーじゃなくて移動なんだからさ
あ、悔し紛れのネガキャンかw
0834デフォルトの名無しさん
2013/01/29(火) 11:40:29.710835デフォルトの名無しさん
2013/01/29(火) 11:58:49.23変数宣言行が増えるってことだよ
で、10行20行と増えちゃって、>>832みたいにやっちゃう初心者が出てくる
0836デフォルトの名無しさん
2013/01/29(火) 12:17:06.71なんで無関係の話を持ってきてややこしくするの
0837デフォルトの名無しさん
2013/01/29(火) 12:31:55.170838桃白白
2013/01/29(火) 12:49:45.25Option Strictがあればいんだけどな。
Javaとかだとint i, jでどっちもintになるから
じゃあi, j As IntegerでどっちもIntegerにしてくれても
いいじゃんと思っちゃう。
0839デフォルトの名無しさん
2013/01/29(火) 13:03:07.32最初からブロック途中で変数宣言OKなVBAなのに、その機能を使わないのはもったいない。
0840デフォルトの名無しさん
2013/01/29(火) 13:24:10.24俺もVBAとJavaScript以外はその場宣言する方が多い
他の言語ってのはたとえばVB.Net 例をあげると
If 条件1 Then
Dim hoge As Integer
hoge = func1()
End If
'
'ここに上下見通せないぐらいのコード
'
If 条件2 Then
Dim hoge As Integer
hoge = func2()
End If
VB.NetではOKだけどVBAではNGな例
他人のプログラム修正で下のIfのとこ追加したことを考えてくれ
ぶっちゃけ最初から最後まで一人で保守するならどっちでもいい
そうじゃないならVBAなら後から見る人のためにも宣言はまとめとけと思うのさ
0841デフォルトの名無しさん
2013/01/29(火) 13:36:14.15Option Strictあっても、ObjectにInteger代入ではエラーにならなかったような
そう言うやつが多いから今のVB.NetではそれでどっちもIntegerになるようになった
0842デフォルトの名無しさん
2013/01/29(火) 13:38:29.43宣言が重複したらすぐにエラーになるから、
If 条件2 Then
Dim fuga As Integer
fuga = func2()
End If
って書き換えればいいよ。
> そうじゃないならVBAなら後から見る人のためにも宣言はまとめとけと思うのさ
後から見る人のために、宣言と使用箇所の距離を短く、変数の有効範囲を狭くしましょうというのが、
Code Completeなんかで説明されてること。
0843デフォルトの名無しさん
2013/01/29(火) 13:46:30.06タナカでも頻繁にやってた気がするけど
Dim l,m as long って宣言したら
mはlongだけどlはvariantになる
俺の環境だけか?
0844デフォルトの名無しさん
2013/01/29(火) 13:48:48.75例えば、Cの例なんだけど、
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.1.list
このゲロが出そうな変数定義見て、なんとも思わない?
ここで定義されてる変数は39個なんだけど、それぞれ使用箇所直前で定義されてたら、
少しは読みやすくなるし、リファクタリングもし易くなると思わない?
0845デフォルトの名無しさん
2013/01/29(火) 13:50:28.25lもlongのつもりで使えばバグは起きないよ
0846デフォルトの名無しさん
2013/01/29(火) 13:56:55.63エクセルじゃまずやらんけど、メモリアドレス直接弄ったりダンプしたりするとき、変数の型データが違うと全部ずれることがある
バグ起きないんじゃなくて、想定しなきゃいけないエラー原因無視してるだけだからなー
0847デフォルトの名無しさん
2013/01/29(火) 14:01:20.68代入も評価もlongの文脈で使えばバグは起きないよ
暗黙の型変換を期待するコードを書くとバグるかもしれないけど
0848デフォルトの名無しさん
2013/01/29(火) 14:06:01.020849デフォルトの名無しさん
2013/01/29(火) 14:18:41.94もしかしてこれiはlongにならないの…?
0850デフォルトの名無しさん
2013/01/29(火) 14:19:33.58当たり前の話だが...
Dimは「変数を宣言する」事を宣言するステートメントだ
その変数がなんなのかを宣言しているのは「as」の後ろだぞ
君の言う「Dim l, m as long」は「Dim m as long, l」と等しいんだぞ
つまり、「mはlongである」と宣言しているが、「lは変数である」としか宣言されていない
0851デフォルトの名無しさん
2013/01/29(火) 14:30:26.98全てわかった上で「当たり前の話」とか言われても・・・
0852デフォルトの名無しさん
2013/01/29(火) 14:34:51.25言われてみればそうだな
0853デフォルトの名無しさん
2013/01/29(火) 14:44:21.08> 俺もVBAとJavaScript以外はその場宣言する方が多い
VBAとJavascript以外の言語では、何のためにその場宣言をするの?
0854デフォルトの名無しさん
2013/01/29(火) 14:44:32.92「当たり前の話」を「当たり前として放置」しているから、「当たり前の話」をしたんだけどな
0855デフォルトの名無しさん
2013/01/29(火) 14:49:44.45両方ともIntegerにしたいなら
Dim i As Integer, j As Integer
のように全部の変数に型を指定しなきゃいけない
0856デフォルトの名無しさん
2013/01/29(火) 14:49:45.23つまり、何が当たり前かなんかどうでもいいこと
0857デフォルトの名無しさん
2013/01/29(火) 14:53:59.09それはどうかな?
VB系の場合は、変数をVariant型で利用するのが「当たり前」なんだと思うよ
どうしても「as」が必要な場面って、関数の引数だけじゃないかな?
0858デフォルトの名無しさん
2013/01/29(火) 14:54:18.61なんでそうしなかったんだろうねぇ
Dim i, j, k As Integer
で、iもjもkもIntegerで宣言されるってのが「普通じゃない」と思う人多数ってことなのか
0859デフォルトの名無しさん
2013/01/29(火) 14:55:12.69> VB系の場合は、変数をVariant型で利用するのが「当たり前」なんだと思うよ
じゃ、Option Explicitなしでいいんじゃね?
0860デフォルトの名無しさん
2013/01/29(火) 15:02:12.68> どうしても「as」が必要な場面って、関数の引数だけじゃないかな?
仮引数を型付きで定義するんなら、実引数側も型を明示した方が良いという思考にはならないかな。
0861デフォルトの名無しさん
2013/01/29(火) 15:02:49.30無しで良かったから、追加機能としてつけられたんであろう859
0862デフォルトの名無しさん
2013/01/29(火) 15:05:23.410863デフォルトの名無しさん
2013/01/29(火) 15:05:37.63何を言っているのか理解が出来ない...
Option Explicitは、「変数を利用する場合に、変数の宣言を強制する」ステートメントであって、「宣言する変数に型を強制する」ステートメントでは無いぞ
0864デフォルトの名無しさん
2013/01/29(火) 15:16:36.86そして、システムハンガリアンの登場ですね
0865デフォルトの名無しさん
2013/01/29(火) 15:19:21.58なんてコードみみせてんだ、きたねえw
機能を分離して関数として分別しとけよ。
0866デフォルトの名無しさん
2013/01/29(火) 15:24:21.29単なるVBはそうかもしれんが、VBAじゃ型明示&アーリーバインド推奨
0867デフォルトの名無しさん
2013/01/29(火) 15:29:04.11ならない
>>864
理想論から話を進めれば、人の書いた関数の中身なんて気にしない
0868デフォルトの名無しさん
2013/01/29(火) 15:32:22.76dim w as worksheet
dim r as range
ってやらずに、
dim w as object
dim r as object
とか
dim w as variant
dim r as variant
とか
dim w
dim r
とかやってんの?
なんたる苦行
0869デフォルトの名無しさん
2013/01/29(火) 15:40:10.07型を宣言しても、宣言しなくても、setしなきゃ使えないんじゃないの?
0870デフォルトの名無しさん
2013/01/29(火) 15:43:27.74もちろんsetするけど、それと型明示と何か関係が?
0871デフォルトの名無しさん
2013/01/29(火) 15:56:15.39質問の意味がわからん
>>868は、
Dim w, r
と宣言するのは
Dim w as worksheet, r as range
と宣言するよりも苦行だと言うから
結局、setするなら、どっちも一緒だろって言いたいのだが
0872デフォルトの名無しさん
2013/01/29(火) 16:00:43.58あれ?あなた>>857なんじゃないの?
> VB系の場合は、変数をVariant型で利用するのが「当たり前」なんだと思うよ
っていうから、じゃworksheetとかrangeの場合も変数宣言時に型明示しないの?それって苦行だよねってことなんだけど。
0873デフォルトの名無しさん
2013/01/29(火) 16:07:29.23だから、変数宣言時に型を宣言しても、なんも意味無いじゃん
0874デフォルトの名無しさん
2013/01/29(火) 16:10:50.39VBAでプログラミングしたことほとんどないんでしょ?
白状しちゃいなよ。
0875デフォルトの名無しさん
2013/01/29(火) 16:17:03.80まっ、基本的にVBScriptしか使わないけどな
取りあえず、俺にわかるように、型宣言する意味を教えてちょーだい
とりあえず、グローバルで変数使うとか馬鹿な事は言うなよ...
0876デフォルトの名無しさん
2013/01/29(火) 16:18:22.98「宣言と使用箇所の距離」じゃなくて「初期化と使用箇所の距離」でしょ。
宣言は初期化じゃないw
0877デフォルトの名無しさん
2013/01/29(火) 16:22:10.86あくまでお前の推測でしょw
0878デフォルトの名無しさん
2013/01/29(火) 16:26:28.34君は、説明も出来ないのに「明示的に型を宣言すべき」と言うのかい?
0879デフォルトの名無しさん
2013/01/29(火) 16:31:17.49> 取りあえず、俺にわかるように、型宣言する意味を教えてちょーだい
・型違いに起因するバグを減らせる
・読み手に与える情報を増やせる
・インテリセンス
>>876
宣言も近い方が良いって書かれてるよ。>>805のリンク先読んで。
0880デフォルトの名無しさん
2013/01/29(火) 16:42:47.58・無駄に大きな関数を作らない限り、型の違いによるバグは起きない
・判りやすい変数名をつけるだけで対応可能
結局、問題点はインテリセンスが効かないだけじゃん
0881デフォルトの名無しさん
2013/01/29(火) 16:45:52.32> ・無駄に大きな関数を作らない限り、型の違いによるバグは起きない
> ・判りやすい変数名をつけるだけで対応可能
だったら、Option Explicitもいらないよね。
0882デフォルトの名無しさん
2013/01/29(火) 16:47:12.65馬鹿じゃね?
Option Explicitは要るだろw
0883デフォルトの名無しさん
2013/01/29(火) 16:48:32.92すぐって、少なくとも実行もしくはコンパイルするまではエラーにならないけど
書き換えたfugaもどっかで使ってたらまたエラーになるわけで
実行するまでエラーかどうかわからんようなコーディングするのかお前は
>変数の有効範囲を狭く
VBAではこれができないから言ってんだよ
VBAの変数はプロシジャ内のどこで宣言されようがそのプロシジャ全体のスコープ
VB.Netの例のようにIfブロック内でスコープ閉じるならそこで宣言すればいい
0884デフォルトの名無しさん
2013/01/29(火) 16:51:25.46VBAのベストプラクティス/Good Partsをどうしようかって話だから、個人の資質で防げることを超えた物を考えようよ。
> Dim w as worksheet
このwの活性範囲が十分に狭いなら、w一文字でもいいよね。
わざわざDim myWorkSheetとかしなくてもいい。
無駄に大きな関数を作らないのも、わかりやすい変数名にするのもGood Partsだけど、それに加えて
変数宣言時に型を明示しましょうというのもGood Partsだよねという話。
型明示するだけでさまざまなメリットを享受できるのに、なんで型明示したくないの?
0885デフォルトの名無しさん
2013/01/29(火) 16:53:38.21あのさあ
エラー起きないように努力するのとは当然だし
エラー起きたときの復旧、メンテ労力下げるように用意するのも当たり前
見えない、見ない、見なかったことにしてるだけじゃん
バグとエラー使い分けられないの見ても判るよ
見えなきゃ不具合は存在しないとでも思ってるんじゃないか
0886デフォルトの名無しさん
2013/01/29(火) 16:57:12.00> >変数の有効範囲を狭く
> VBAではこれができないから言ってんだよ
> VBAの変数はプロシジャ内のどこで宣言されようがそのプロシジャ全体のスコープ
何かの言語とごっちゃになってるよ。
VBAでは、変数宣言するまでは、同一スコープではその変数は使えないよ。
0887デフォルトの名無しさん
2013/01/29(火) 16:59:27.380888デフォルトの名無しさん
2013/01/29(火) 16:59:44.560889デフォルトの名無しさん
2013/01/29(火) 17:05:53.64ふぅ、Dimのみで見れば
Dim w as worksheet
と
Dim w
では違うように見えるが...
結局は、setでワークシートオブジェクトを関連付けなければならないのだから、活性範囲が十分に狭いという条件では、明示的に型を宣言しようがしまいがどちらも同じだろ
メリットとしてあるのは、インテリセンスが効くか効かないかだけ
その唯一残ったメリットも、COM経由でEXCELを利用する時には意味はなくなるし
0890デフォルトの名無しさん
2013/01/29(火) 17:08:26.99いろいろごっちゃにしないでくれるかな。
> 活性範囲が十分に狭いという条件では、明示的に型を宣言しようがしまいがどちらも同じだろ
活性範囲が十分に狭ければ、通常はお勧めできない一文字変数でも良い場合もあるということ。
setを使うかどうかは関係無い。
> メリットとしてあるのは、インテリセンスが効くか効かないかだけ
・型違いに起因するバグを減らせる
・読み手に与える情報を増やせる
は無視ですか。
> その唯一残ったメリットも、COM経由でEXCELを利用する時には意味はなくなるし
まぁ、Excel使い以外はどうでもいいことでしょうね。
0891デフォルトの名無しさん
2013/01/29(火) 17:09:04.57メンテw
関数やサブルーチンの引数には、型宣言は必要だと言ってるのですがw
0892デフォルトの名無しさん
2013/01/29(火) 17:10:06.310893デフォルトの名無しさん
2013/01/29(火) 17:10:15.15それは変数の寿命の問題
(変数名の)有効範囲の問題じゃない
0894デフォルトの名無しさん
2013/01/29(火) 17:10:44.31あー、これはやっちゃいましたね。
ド素人丸出しw
0895デフォルトの名無しさん
2013/01/29(火) 17:14:02.54Public Sub Foo()
Dim w as worksheet
(・・・十行・・・)
dim r as range
(・・・十行・・・)
End Sub
このrの有効範囲は、下十行に限定される。
関数先頭で宣言するより、必要になった場所で宣言しましょうってことだよ。
0896デフォルトの名無しさん
2013/01/29(火) 17:22:17.88>このrの有効範囲は、下十行に限定される。
されない。dim rより上でもrを宣言できない=下のdimと同一スコープ内だから2重宣言
限定するようにプログラミングするべきではあるが、言語仕様として限定されない
0897デフォルトの名無しさん
2013/01/29(火) 17:25:27.84変数の宣言を直前にやってもいいと思う。
ただし、使用後に処理が続く場合は意味ないんだけどw
>>842のようにIfステートメント内で変数宣言してもIfステートメント抜けてもfugaは使えるわけで。
誰かがメンテナンスの時にその変数使ってしまうことも考えられるわけで。
使用する直前に初期化するのは理解できるけど、使用する直前に宣言するメリットがわからない。
0898デフォルトの名無しさん
2013/01/29(火) 17:28:02.57使用できるかどうかと、同一名称の変数を宣言できるかどうかは別問題だよ。
有効範囲という言葉が気に入らないなら、使用可能範囲と言ってもいい。
ちなみに、俺がこれまでに言ってきたことは、俺が独自で考え出したことじゃないよ。
プログラミング一般に広く広まっている概念。
Code Compleもそうだし、たとえばここでもそう言われている。
http://www.ibm.com/developerworks/jp/java/library/j-noaccent.html
VBAもそうできるんだからそうしましょうよってことなんだがなぁ。
だんだん疲れてきたぞ。
0899デフォルトの名無しさん
2013/01/29(火) 17:30:51.64> 使用する直前に初期化するのは理解できるけど、使用する直前に宣言するメリットがわからない。
宣言と初期化を同一行で書ける言語(定義できる言語)はそうした方がいいし、
できない場合でも、宣言はできるだけ使用する直前でやった方が良い。
・・・というのがCode Completeや>>898のリンク先で書かれてること。
0900デフォルトの名無しさん
2013/01/29(火) 17:34:23.05型違いに起因するバグが何故起きるのかの説明が必要だな
次に、変数が何をするものなのかは、変数の初期化によって明らかにするべきであって、変数の宣言で行う事ではない
VB系の言語の場合、変数の型宣言は型宣言が必要な場合にのみ行うように作られているってのを忘れてはならない
0901デフォルトの名無しさん
2013/01/29(火) 17:38:04.09たとえばそこには、変数はループの内側に入れること って言うのがある
これはループ内で宣言した変数がループ内のみでしか使えないって前提なんだよ
だがVBAではどこで宣言しようが、そのプロシジャ全てでその名前が有効になるんだよ
(使えるのは宣言より後ろだとしても)
つまりループの後でループ内宣言の変数を使える
それではループ内で宣言する意義がうすいんだよ
0902デフォルトの名無しさん
2013/01/29(火) 17:38:09.91> 次に、変数が何をするものなのかは、変数の初期化によって明らかにするべきであって、変数の宣言で行う事ではない
型を明示すれば、何をするかはわからずとも、何を扱うかは明確になるよね。
> VB系の言語の場合、変数の型宣言は型宣言が必要な場合にのみ行うように作られているってのを忘れてはならない
Option Explicitなしでもいいけど、Option Explicitで変数宣言を強制して、なおかつ型を明示するのが
ベストプラクティスだよって話なんだが。
で、なんで型を明示したくないの?
0903デフォルトの名無しさん
2013/01/29(火) 17:40:52.28> (使えるのは宣言より後ろだとしても)
それが重要なんだけど。
declarationするまでは、その変数は使いませんというプログラマの意図の明示。
0904デフォルトの名無しさん
2013/01/29(火) 17:44:56.44同一スコープでは二重定義できないけど、やっぱり宣言(定義)以降じゃ無いと使えないのはVBAと同じ。
そういう制限があるから、K&Rみたく関数の先頭で全部宣言しましょうとはならない。
というか、そうしたくないからC99でスコープの途中で宣言できるようになった。
0905デフォルトの名無しさん
2013/01/29(火) 17:45:44.27そんな話初めて聞いたしw
完全に後出し。
いい加減にしろ。
0906デフォルトの名無しさん
2013/01/29(火) 17:47:58.02Option Explicit書かなかったら使えるでしょ。
途中でバグる可能性あるけどw
0907デフォルトの名無しさん
2013/01/29(火) 17:49:11.12変数の宣言
dim 変数
変数の型宣言
変数 as 型
一行での変数の宣言および型宣言
dim 変数 as 型
で,変数の宣言は明示すべきだ!って人と,変数の型宣言は明示すべきだ!ってのがごっちゃになってる人いないか?
>>888
いまさら突っ込むけど,変数宣言の強制が初期設定で行われるのはdotNetからな
VBもVBAも自分で変数宣言強制オプション指定する必要がある
・・・確かそんな気がした
>>891
・・・ごめん,君がなに言ってるのかちょっとわかんない
いや,>>891自体は理解できるんだけど,なんで>>891のレスになってるのかが理解できない
会話はキャッチボールしようぜ,なんで一人でゴルフしてんだよ,連続性がないww
0908デフォルトの名無しさん
2013/01/29(火) 17:51:48.21> そんな話初めて聞いたしw
> 完全に後出し。
>>805のリンク先を読んで貰えればわかると思ったんだが、わかってなかったんならそれはすまない。
さて、それがわかったところで、変数宣言は使用箇所の直前でやったほうが良いということには賛成?反対?
0909デフォルトの名無しさん
2013/01/29(火) 17:52:45.30C99のスコープはプロシジャ単位ですか?
ブロック中で宣言された変数はブロックを抜けたあとでも有効ですか?
ブロック内でスコープ閉じる言語なら先頭でまとめて宣言しろなんて言わんわ
0910デフォルトの名無しさん
2013/01/29(火) 17:53:29.50> いまさら突っ込むけど,変数宣言の強制が初期設定で行われるのはdotNetからな
> VBもVBAも自分で変数宣言強制オプション指定する必要がある
> ・・・確かそんな気がした
これも明確にしてなかったけど、Option Explicitは当然としての話ね。
変数宣言が強制されるとして、さて、変数宣言はどこで行うのがいいのかねって話。
0911デフォルトの名無しさん
2013/01/29(火) 17:53:58.22誰がパイパイで誰がパイパンなの?
いい加減自演くさい
0912デフォルトの名無しさん
2013/01/29(火) 17:55:55.850913デフォルトの名無しさん
2013/01/29(火) 17:57:38.78> C99のスコープはプロシジャ単位ですか?
C99の話は、変数宣言箇所以前でも、同一スコープ内では同名の変数は宣言できないよってことの例。
> ブロック内でスコープ閉じる言語なら先頭でまとめて宣言しろなんて言わんわ
>>895のコードは、Sub内がすべて同一スコープだけど、それでもrはあの位置で行いましょうねってこと。
0914デフォルトの名無しさん
2013/01/29(火) 17:57:53.62スコープの意味が判ってない奴が、大声で喚き散らしているからどうにもならん
・変数の宣言は必要だが、型の宣言は必ずしも必要ではない
・VB系の言語でスコープを使い分けたい場合は、一々関数かサブルーチンとして別ける必要がある
0915デフォルトの名無しさん
2013/01/29(火) 18:01:09.21それはその通りだが、型を明示した方がいいよって話を延々としてるんですが。
型を明示することに大いなるデメリットがあるなら「それはするな」と言うし。
0916デフォルトの名無しさん
2013/01/29(火) 18:03:09.17> ・VB系の言語でスコープを使い分けたい場合は、一々関数かサブルーチンとして別ける必要がある
スコープを使い分ける話をしたいわけではなく、同一スコープ内のどこでも変数を宣言できるVBAでは
(正確には、使用する前までだが)、どこで宣言しましょうねって話だよ。
0917デフォルトの名無しさん
2013/01/29(火) 18:04:03.37そこを論点にしてるのはお前だけだ
型を明示しない方が良いって言ってるやつは多分一人だけだ
大多数は変数の宣言と宣言時の型指定については納得してる
論点は宣言(と初期化)のタイミング
まあ、ほとんど宗教論。コーディングスタイルの違い
0918デフォルトの名無しさん
2013/01/29(火) 18:05:41.18だからといって、じゃあ変数は関数の先頭でまとめてやるのが良いかというと、それは別の話だよね。
0919デフォルトの名無しさん
2013/01/29(火) 18:07:49.79> そこを論点にしてるのはお前だけだ
> 型を明示しない方が良いって言ってるやつは多分一人だけだ
> 大多数は変数の宣言と宣言時の型指定については納得してる
あ、そうなの?
複数人を相手してるのに気づかなかったよ。
> 論点は宣言(と初期化)のタイミング
> まあ、ほとんど宗教論。コーディングスタイルの違い
俺の意見は、宗教論ではなく明確な理由でよりよい方というのが選択できるというもの。
それはCode Completeなんかで詳しく説明されてる。
0920デフォルトの名無しさん
2013/01/29(火) 18:08:59.81・うんこするのだけが必要で他はまったくいらない派
うんこするのと,うんこした後紙で拭くことを区別できないやついるよな
うんこは必要だけど,うんこした後紙で拭くのは必ずしも必要ないだろjk
・うんこするのは当然必要だけど,おしり拭いたほうがいいよ派
うんこが必要なのはそうだけど,うんこした後紙で拭いたほうがいいよ
紙で拭いたら死ぬとかならしょうがないけどさ
・うんこするのは当然必要だけど,おしりのことも考えてやれよ派
うんこした後ふくのはいいんだけどさ,紙でふくんじゃなくて,ウォッシュレット使ってから紙で拭けばいいんじゃね?
二度手間になるけど清潔じゃん!
・うんこしないよ派
うんこするって冒頭で宣言しなけりゃいいじゃん
0921デフォルトの名無しさん
2013/01/29(火) 18:10:18.44変数はスコープの最初で宣言する
だたし、スコープが充分狭い場合は使用(初期化)する直前でもよい
初期化は使用する直前に行う
異論は認める
0922デフォルトの名無しさん
2013/01/29(火) 18:12:06.91もっとお母さんみたいに言ってくれ
0923デフォルトの名無しさん
2013/01/29(火) 18:12:19.20(以下のこのスタイルというのは、K&Rで関数先頭に固めて変数定義する方法)
> その一方、このスタイルにはいくつものマイナス面があります。まず、変数の宣言と変数の使用が
> 切り離されるため、コードを追うのが少し大変になります。さらに、1 つのローカル変数が、おそらく
> 無意識に異なる用途で再利用される可能性がかなり高くなります。この場合、変数にそのまま値が
> 残され、その値がコードの期待していた値でなければ、予期せぬバグが発生してしまいます。この
> ような変数の再利用と、C での短く不可解な変数名という傾向を併せて考えれば、大惨事の原因と
>なることは明白です。
>
> Java 言語では (そして C の最近のバージョンでも)、変数は最初にそれを使用する箇所、あるいは
> その近くで宣言することができます。この宣言方法を実践して Java コードを作成すれば、コードは
> より安全になり、バグが発生しにくくなり、そして読みやすくなります。
というのに完全に同意できるんだよね。
Code Completeでも同じようなことが書かれてるんだけど、これに同意できない人が何故同意できないのか
その理由が知りたいんだよ。
0924デフォルトの名無しさん
2013/01/29(火) 18:14:45.50スコープが長い時の方が使用する直前で宣言するメリットがでかいだろ
0925デフォルトの名無しさん
2013/01/29(火) 18:14:46.92ここはム板でかつ「Excel」VBAスレだから
マ板いけ
0926デフォルトの名無しさん
2013/01/29(火) 18:16:35.060927デフォルトの名無しさん
2013/01/29(火) 18:19:24.72わかった。もうやめるわ。
0928デフォルトの名無しさん
2013/01/29(火) 18:19:37.530929デフォルトの名無しさん
2013/01/29(火) 18:20:43.890930デフォルトの名無しさん
2013/01/29(火) 18:23:54.42>Java 言語では (そして C の最近のバージョンでも)、
VBAはJava言語でも最新のCでもないから
>変数は最初にそれを使用する箇所、あるいは
> その近くで宣言することができます。
には該当しないのですね。わかりました
0931デフォルトの名無しさん
2013/01/29(火) 18:25:40.77俺は一人でマ板に帰るぞ!
0932デフォルトの名無しさん
2013/01/29(火) 18:28:10.58>>930
禿同。
0933デフォルトの名無しさん
2013/01/29(火) 19:42:36.94For i = 0 to 10
'何かの処理1
Next
Dim i
For i = 0 to 10
'何かの処理2
Next
これが通るかどうかを考えれば、変数の宣言位置は決まるだろ?
0934デフォルトの名無しさん
2013/01/29(火) 20:14:53.71ここは無職のたまり場
0935桃白白
2013/01/29(火) 20:18:38.92仕事くれ
0936デフォルトの名無しさん
2013/01/29(火) 20:31:18.20つ生保
0937デフォルトの名無しさん
2013/01/29(火) 20:31:22.56在宅勤務なのですが何か?w
0938デフォルトの名無しさん
2013/01/29(火) 20:32:29.91年収300万円以下の底辺は無職と同じ
0939デフォルトの名無しさん
2013/01/29(火) 20:32:34.45gdgdになってるようだけど結局どうなのよ?
0940デフォルトの名無しさん
2013/01/29(火) 20:51:56.84カマかけたら釣れたw
0941デフォルトの名無しさん
2013/01/29(火) 21:00:02.050942デフォルトの名無しさん
2013/01/29(火) 23:04:53.740943デフォルトの名無しさん
2013/01/29(火) 23:09:11.22まるで不毛な
会議室
そろそろ次スレ
建てていいかも
0944デフォルトの名無しさん
2013/01/29(火) 23:51:19.88Ctrl + g !!
チュウィンッッ
0945デフォルトの名無しさん
2013/01/29(火) 23:57:13.36Dim WorkS As String: Dim WorkV As Variant: Dim WorkO As Object
0946デフォルトの名無しさん
2013/01/30(水) 00:01:43.82Excelがものすごく重くなるんですけど
これの原因と対策はなんでしょうか?
もちろん朝AM9に来てすぐにExcelは起動し、ずっと帰宅のPM6までExcelは起動しっぱなしです。
0947デフォルトの名無しさん
2013/01/30(水) 00:07:21.10原因は不明
対策はモニターを叩き割る
モニターを地面に叩き付けて踏み付けて
応援してる
0948デフォルトの名無しさん
2013/01/30(水) 01:15:16.71>>945みたいにスペースを空けて揃えることができない
0949桃白白
2013/01/30(水) 04:15:54.92VBAで変なことやってんじゃないの?まじめに仕事しろ。
0950デフォルトの名無しさん
2013/01/30(水) 05:07:19.57Application.MemoryTotalでちろちろ確認してみなよ
エンジニアなら原因を一つ一つ検討して潰すことを面倒がるな
足りないのがメモリかCPUかはっきりさせること。
メモリが足りないならExcelが使える分を増やし、
CPUのパワーが足りないなら(あまり考えられない)上司にねだれ。
ワークシートのつくりを軽くすること、データをメモリ上で処理して
余計な操作や無駄なループをなくすこと。
自分のPCでどれだけのワークブックなら重くなるか
いっぺん実験してみればいいじゃん。
一枚目のシートにVBAで65536×256(2003までの場合)データを
ランダムに入れ、二枚目以降でデータをif文で評価する数式を敷き詰める。
シートの枚数増やすたびに再計算して、かかった時間をDebug.Print。
0951デフォルトの名無しさん
2013/01/30(水) 12:33:34.83もう少し勉強してからにしろよ
0952デフォルトの名無しさん
2013/01/30(水) 12:54:16.800953デフォルトの名無しさん
2013/01/30(水) 13:12:47.46時代はExcelDNAだ
http://exceldna.codeplex.com/
0954デフォルトの名無しさん
2013/01/30(水) 15:10:28.86素人さんに使ってもらう為に配布するにはかんたんだけどなあ。
0955デフォルトの名無しさん
2013/01/30(水) 15:16:30.29終ってるどころか始まりもしなかったものに、いつまで固執してるんだ?w
0956デフォルトの名無しさん
2013/01/30(水) 20:23:56.680957デフォルトの名無しさん
2013/01/31(木) 00:46:26.29だったら俺のまんこにドッキングしてみろよ
0958デフォルトの名無しさん
2013/01/31(木) 02:16:47.510959デフォルトの名無しさん
2013/01/31(木) 09:14:16.71例えば10月15日を基準にして、10月1日〜15日で有給を1日消化、10月16日〜30日
までに有給を1日消化したと仮定した場合、
15日までの1日を10から引き、16日からの1日を4から引きたい場合、
どういうプログラムにしたらいいでしょうか。
何分初心者なので、宜しくお願い致します。
0960デフォルトの名無しさん
2013/01/31(木) 09:32:08.12a = (10 - 1) + (4 - 1)
0961デフォルトの名無しさん
2013/01/31(木) 09:38:53.750962デフォルトの名無しさん
2013/01/31(木) 09:40:39.42併せて教えてやれよ。
0963デフォルトの名無しさん
2013/01/31(木) 09:44:39.24日付が15以前なら前半から、それより後なら後半から
減算すれば
後で使うんだったら月ごとにデータ貯めて、最後に計算すりゃいい
0964デフォルトの名無しさん
2013/01/31(木) 11:23:11.62プログラムってのはお前のやりたい事をコンピュータ向けの言語で書くことなんだが
お前のやりたいことはお前にしかわからないから、せめてやりたい事ぐらい伝わるように書け
お前が上げた日付や数字はどっからもってきて、最終的にどういう結果をどう出力したいんだ?
0965デフォルトの名無しさん
2013/01/31(木) 11:46:34.160966デフォルトの名無しさん
2013/01/31(木) 11:52:35.05そもそも質問になっていない。
ただのつぶやきレベル。
比較してどうなんでしょって言うけど
何をどういう観点で比較したいの?
それは自分で比較できないことなの?
人としてもっとまともな会話をしようよ。
0967デフォルトの名無しさん
2013/01/31(木) 11:57:04.130968デフォルトの名無しさん
2013/01/31(木) 12:59:29.59多分、お前がこのスレの癌だ
0969デフォルトの名無しさん
2013/01/31(木) 13:10:50.120970デフォルトの名無しさん
2013/01/31(木) 13:45:56.79http://toro.2ch.net/test/read.cgi/tech/1359607536/
0971デフォルトの名無しさん
2013/01/31(木) 13:50:10.85ゆとり丸出しだな
何をどうやって比較しろと言われないと、何もできないのか
0972デフォルトの名無しさん
2013/01/31(木) 14:05:19.92かんべんしてやってくれ(笑)
0973デフォルトの名無しさん
2013/01/31(木) 14:17:22.82必死すぎw
0974デフォルトの名無しさん
2013/01/31(木) 14:23:14.96かんべんしてやってくれ(笑)
0975デフォルトの名無しさん
2013/01/31(木) 14:24:25.09そりゃそうだろ
C#でcom作ってどうたらという話が
VBAと何の関係があるのか、俺にはさっぱりわからん。
お前にはわかるのか?だったら答えてやれよ。
0976デフォルトの名無しさん
2013/01/31(木) 14:38:08.68わからないんだったら
黙ってろ、糞が
0977デフォルトの名無しさん
2013/01/31(木) 14:39:05.06それを言うのならお前が答えればいい。
0978デフォルトの名無しさん
2013/01/31(木) 14:45:28.55承認してくれ
承認してくれ
承認してくれ
承認してくれ
承認してくれ
0979デフォルトの名無しさん
2013/01/31(木) 14:48:12.66なあ、お前論文書いたことある?
0980デフォルトの名無しさん
2013/01/31(木) 14:52:04.05C#でCOMを作ってVBAを拡張するのと、Excel-DNAを使ってコードを作るのとでは、いろんな面でどうなんでしょうねってことでしょ。
いろんな面というのは、開発効率とか、ユーザの利便性とか、メンテナンス性とか、将来性とか、セキュリティ面とか、いくらでもある。
その中で何かを語りたいなら語ればいいじゃんってことでしょ。
俺は興味無いけど。
0981デフォルトの名無しさん
2013/01/31(木) 14:53:08.200982デフォルトの名無しさん
2013/01/31(木) 14:55:13.810983デフォルトの名無しさん
2013/01/31(木) 15:03:43.74自演じゃないとわからんレベルだなw
0984デフォルトの名無しさん
2013/01/31(木) 15:07:03.18ということにしたいんですね。
うざいわ、お前。
0985デフォルトの名無しさん
2013/01/31(木) 15:22:11.260986桃白白
2013/01/31(木) 16:29:35.22http://i.imgur.com/cQ8pGlF.png
0987デフォルトの名無しさん
2013/01/31(木) 20:08:57.570988デフォルトの名無しさん
2013/01/31(木) 20:23:35.92com作るはcom使うの間違いじゃないかと思うんだが
>>980
俺の解釈ではC#でCOM経由でEXCELを拡張するのと、VBAでEXCELを拡張するのと
比較してどうだろう、って話じゃないかと
俺も興味ないけど
0989デフォルトの名無しさん
2013/01/31(木) 21:01:22.63いつまで話続ける気だ、ヴォケ
0990デフォルトの名無しさん
2013/01/31(木) 21:11:13.331000行くまでだ、ヴァカ
0991デフォルトの名無しさん
2013/01/31(木) 22:14:41.40それカリン様w
0992デフォルトの名無しさん
2013/01/31(木) 23:02:52.46COM 使うには using とかでちゃんと解放 (Dispose) しないとはまるから、意外と気を使う。
なので、ちょっとした用途なら Excel VBA のほうが樂。
ていうか、Visual C# for Application 作ってくれよ… > MS
0993デフォルトの名無しさん
2013/01/31(木) 23:37:42.510994デフォルトの名無しさん
2013/02/01(金) 00:02:20.80以前、プリンタポートを汎用ポートとして使用できるDLLがトランジスタ技術の付録で付いてきていて、
VBAからそのDLLをコールして測定システムを組んだことがある。
実験結果の記録もVBAで出来るからかなり効率よく仕事ができた。
0995デフォルトの名無しさん
2013/02/01(金) 00:35:41.680996デフォルトの名無しさん
2013/02/01(金) 02:50:16.970997デフォルトの名無しさん
2013/02/01(金) 03:02:34.470998デフォルトの名無しさん
2013/02/01(金) 05:20:33.120999デフォルトの名無しさん
2013/02/01(金) 05:21:55.11Excel VBA 質問スレ Part28
http://toro.2ch.net/test/read.cgi/tech/1359607536/
10001000
2013/02/01(金) 05:51:54.22,,_
ノ `'ーァ、 このスレッドは999を超えました
,,.- ‐、ノ ./゙/ @ 新しいスレッドを立ててください
;<,.-‐ァ|実| `ヽ,//
`ヽi,. / |況| .,∧ l l 実況はサッカー実況板で
.l |禁| ,l .l l l ∧,,∧ http://live2ch.net/
| ヽ止ヽLiヘ_l,l \ ミ゚Д゚;,彡つ彡
.l, .l, ヽ、__.l \\ (⊃ J ミ´
.l 'l l. l ,|. Σ⊂゙,,, ,,,ミ〜
゙i,,__'|,l,._l,_l \)
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。