2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Excel VBA 質問スレ Part27

1 :デフォルトの名無しさん:2012/11/25(日) 20:19:47.50
ExcelのVBAに関する質問スレです

★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/

2 :デフォルトの名無しさん:2012/11/25(日) 20:20:18.07
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/

3 :デフォルトの名無しさん:2012/11/25(日) 20:26:49.17
わからなければとりあえず Alt, T, M, R

T, M, R

T, M, R

4 :デフォルトの名無しさん:2012/11/25(日) 20:29:39.60
新しいスレッドを立ててくださいです。。。
くださいです。。。
。。。

くださいです (ワラ

5 :デフォルトの名無しさん:2012/11/25(日) 20:32:51.83
ある特定のシートに関連づいたWindowオブジェクト(複数ある場合もあり?)を取得するにはどうすればいいんでしょうか
WorkbookのWindowsプロパティやActiveWindowだと
状況によって意図しないWindowを取得してしまいそうなんですが

6 :デフォルトの名無しさん:2012/11/25(日) 22:27:14.08
大阪マラソンのページで、ここにナンバー(4ケタ)を入れて検索すると、走った人の名前とゴールタイムや各5kmごとの区間タイムが出てきます
http://p.twpl.jp/show/orig/htR9M

できるだけたくさんのデータをVBAを使って収集したいのですが、
そのために使用するブラウザを操作してwebからデータを集めるための使用するステートメントや関数などのコードは
どんなものがあるか代表的なものから便利なものまでひととおり教えていただけませんか?

お約束のようなので付け加えますと
(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)

7 :デフォルトの名無しさん:2012/11/25(日) 23:23:56.04
Excel VBAの勉強にオススメの本かサイトなどあれば教えてください

8 :デフォルトの名無しさん:2012/11/26(月) 00:11:55.40
>>7
MSDNライブラリ

9 :デフォルトの名無しさん:2012/11/26(月) 00:16:20.29
>>7 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

10 :デフォルトの名無しさん:2012/11/26(月) 00:31:24.22
正直な話、VBAはド素人でも何とか書けちゃう言語なのに
本とかサイトに沿って勉強しようとしてる時点で向いてない気がするよ
とりあえず書いて困ったら検索の方が合ってる言語だと思う
大抵やりたいことをぐぐれば答えが見つかるし

11 :デフォルトの名無しさん:2012/11/26(月) 01:40:29.54
>>10
それは他言語の経験がある人の場合だな
どんなに簡単な言語でも素人がいきなり書くのは無理
アルゴリズムとか変数の概念とか、言語の種類に関係ない基本事項はやっぱりきちんと勉強しないと

12 :デフォルトの名無しさん:2012/11/26(月) 01:44:25.23
>>6
最近のマラソンは仮装して走るのがブームらしいね
先週はこんな人が優勝してる
ttp://24.media.tumblr.com/tumblr_mdqqq5Pgot1qziltwo1_500.jpg

13 :7:2012/11/26(月) 01:46:15.16
そんなに難しく考えるようなものじゃないんですね
ありがとうございます

14 :デフォルトの名無しさん:2012/11/26(月) 03:01:49.13
          ○   ∇ 、,、´`゙;~、  ';冫 ☆
           ┏  ━ゝヽ''人∧━∧从━〆A!゚━━┓。
 ╋┓"〓┃  < ゝ\',冫。' ∩___∩ ゛△│´'´,.ゝ'┃.      ●┃ ┃┃
 ┃┃_.━┛ヤ━━━━━ | ノ      ヽ━━━━━━━━━  ━┛ ・ ・
        ∇  ┠─Σ-/  ●   ● |  ァ Ζそ,´; ┨'゚,。
           .。冫▽ < |    ( _●_)  ミ  乙  ≧   ▽        >>1
         。 ┃   彡、   |∪|  、`\ │   て く
           ┠─./ __  ヽノ /´>  )'.┼ ァ Ζ┨ ミo''`
         。、゚`。、 (___)   / (_/' ×  个o
        ○  ┃   `|       /   !ヽ.◇    o┃
            ┗〆━┷ Z,.' /┷━''o ヾo┷+\━┛,゛;
       ヾ                   '、´    ∇

15 :デフォルトの名無しさん:2012/11/26(月) 05:29:33.77
>>12
トップだけあって、お面と足の筋肉のギャップが凄いなw

16 :デフォルトの名無しさん:2012/11/26(月) 18:45:48.12
>>3
多摩レボリューションだっけ?

17 :デフォルトの名無しさん:2012/11/26(月) 20:30:34.97
そろそろ>>6がとんでもないリンクを貼ってしまったことに気付く頃合かな

18 :6:2012/11/26(月) 21:17:48.15
失礼(汗。
こちらでした。
http://www.moviecloud.jp/osaka2012/

19 :デフォルトの名無しさん:2012/11/27(火) 12:51:37.37
動的配列をdimで宣言しておいて、後からredimで要素数を指定する、
という使い方の場合、
その配列が
redimしてあるかどうかを調べる方法ってありますか?
別プロシージャから引数で渡された配列を処理する時に、
宣言だけでredimされていない変数は処理をスキップしたいのですが、
isarrayでは区別できませんでした。
(要素数が指定されてなくてもtrueになってしまう。)

使用しない変数にもredim (0) をするのは、
コードの改修がかなり必要になるので、出来れば避けたいです。
何か良い方法がありましたらアドバイスいただけると幸いです。

20 :19:2012/11/27(火) 13:02:23.62
書き忘れてましたが、何故処理をスキップしたいのかというと、
redimされてない変数を処理すると

実行時エラー '9':
インデックスが有効範囲にありません。

というエラーがでるからです。

21 :デフォルトの名無しさん:2012/11/27(火) 13:53:38.86
>>20
なんだろう、この気持ち悪さは

22 :デフォルトの名無しさん:2012/11/27(火) 14:51:52.95
>>20
それ単なるバグじゃ?

23 :デフォルトの名無しさん:2012/11/27(火) 15:43:04.91
>>20
UBound

24 :19:2012/11/27(火) 15:53:11.68
>>22
そうです、私の書いたコードのアルゴリズムがまちがってるので
エラーになります。

根本的に直すのは複数箇所の修正が必要になるので、
小手先でごまかそうと考えて先の質問をしました。

>>23
ありがとうございます。
残念ながらuboundもダメでした。やはり
インデックスの有効範囲〜
のエラーになります。

25 :桃白白:2012/11/27(火) 16:04:24.14
>>24
あろーはー。例外捕まえちゃったら?
Array関数で作った要素数0の配列は0から-1までになるから
これを真似しちゃったらいんじゃない。
UBound(a) - LBound(a) + 1で要素数を求めるときにも整合性取れるし。
こんな感じで。
https://friendpaste.com/4gLpu6eKECJSBtzyhlIocW

26 :デフォルトの名無しさん:2012/11/27(火) 16:08:10.23
>>24
On Error

27 :19: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

28 :19:2012/11/27(火) 16:11:50.63
すみません。リロードしてませんでした。
アドバイスありがとうございました。
今後の参考にさせて頂きます。

29 :デフォルトの名無しさん:2012/11/27(火) 16:12:40.19
「配列 空 vba」とかでググったらいっぱいヒットするけど・・・

30 :19:2012/11/27(火) 16:22:47.40
>>29
どうもすみません、教えていただいたキーワードでぐぐったら出てきました。
大変参考になりました。
ttp://app.m-cocolog.jp/t/typecast/652919/549018/73143358
ここにあった not not で解決でした。
皆様ありがとうございました。

31 :デフォルトの名無しさん:2012/11/27(火) 16:56:47.35
いずれにしても、関数にした方がいいよ。
If not not varArray Then
とか、何を調べてるのかぱっと見意味不明だし。

If IsVarArrayEmpty(varArray) Then
とか
If Not IsVarArrayEmpty(varArray) Then
だったらわかりやすいでしょ。

32 :デフォルトの名無しさん: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が入っていた行を持ってきたいのです。
これを、配列がなくなるまで続けたいのですが、どのようにすればいいかが掴めません。
ご教授、宜しくお願いします。

33 :デフォルトの名無しさん:2012/11/27(火) 22:06:42.34
>>32
質問1 数字は0.5、1、2の3通りだけ?
質問2 全体の合計は8の倍数になってる?整理したらきっちり最後まで「合計8」のグループに分けられる?

34 :デフォルトの名無しさん:2012/11/28(水) 00:31:29.04
あれ、書き込んでなかった

困ってること:文字列(フォント)の横幅dot数を調べたい

Graphics.MeasureString メソッドがあればいいんだけれど、エクセルなので・・・
どうしたらいいでしょうか

35 :デフォルトの名無しさん:2012/11/28(水) 01:20:43.77
>>34
GetTextExtentPoint32

36 :デフォルトの名無しさん:2012/11/28(水) 01:22:49.74
うおーありがとうございます

37 :32:2012/11/28(水) 02:13:13.20
>>33
ご回答ありがとうございます。
質問1 数値自体はその3つのみです。
質問2 いえ、全体の合計は不明です 少なくとも、8の倍数キッカリには収まりません

38 :デフォルトの名無しさん:2012/11/28(水) 02:31:18.33
>>32>>37

ループ(
 1 D行を足す、列番号を取得
 2 8未満である
  Y→1
   8である
  Y→ループ抜ける
   8以上である
  Y→最後の加算を破棄して次の列にいく→1

3 取得した列番号を基に列を入れかえる

39 :デフォルトの名無しさん:2012/11/28(水) 02:37:08.01
>>32
まず一点、誤りを指摘すると、
エクセルでは「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になります。
つまり数値の取り方に複数の候補がある場合、
どれを優先すればよいのかがよく分からないのです。
その部分はもっと厳密に説明する必要があると思います。

40 :デフォルトの名無しさん:2012/11/28(水) 03:24:12.41
自由に並べ替えていいんなら全体を降順ソートすれば一発で終わるんだけど

41 :デフォルトの名無しさん:2012/11/28(水) 04:02:04.18
>>40
身も蓋もないことを

42 :32:2012/11/28(水) 08:57:48.88
>>38 ありがとうございます、早速試してみます
>>39 すみません、初歩的なミスでしたorz
 順番ですが、上にあるもの程、優先になります。
 その例ですと、1+2+2+2+0.5…(2個飛ばして)+0.5
 を選択し、飛ばした先にある0.5を、
 1+2+2+2+0.5 の次に並び替えるようにしたいです。

>>40 説明不足でした、優先順位がありますorz

43 :デフォルトの名無しさん:2012/11/28(水) 18:28:43.80
つかここアルゴリズムスレじゃないんだから、方法は自分で考えろよ
その方法をVBAで実装する段階になってから質問しろや

44 :32:2012/11/28(水) 18:32:59.44
皆様、ご指導ありがとうございます。
>>38さんのアドバイスを参考に、
汚いソースになりましたが、なんとか完成致しました。

スレ汚し、失礼しました

45 :34: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

46 :デフォルトの名無しさん:2012/11/28(水) 18:43:41.56
Excel2000に64bitバージョンなんてあったか?
どっちにしてもOSの情報わからんと何とも言えんわ

47 :34:2012/11/28(水) 19:09:14.68
win7 64bit機です

何か勘違いしてたかも

>>45
19: hWnd = Application.hWnd
でエラーが発生して動作しなくなりました

winXP 32bit機 Excel2000の入ってるPC引っ張り出してきて実行したところ
オブジェクトはこのプロパティまたはメソッドをサポートしていません
とエラーを生成しました

PC環境で実行できたり出来なかったりするんですが、何か参照設定が必要だったりするのでしょうか

48 :34:2012/11/28(水) 19:22:47.39
・・・ああ判った

Application.hWnd てexcel2000じゃサポートしてないのか
ってことですよね

49 :デフォルトの名無しさん:2012/11/28(水) 20:34:16.35
>>48
PtrSafe

50 :デフォルトの名無しさん:2012/11/28(水) 21:29:13.31
まず、
OSに32/64ビットの区別があること
EXCELに32/64ビットの区別があること
を理解してから出直してください

51 :デフォルトの名無しさん:2012/11/28(水) 21:43:29.61
Long Long Ago問題か?

52 :デフォルトの名無しさん:2012/11/28(水) 22:06:49.53
bit数とかPtrSafe以前にExcel2000じゃ動かないって話
OSとか関係ないって突っ込んでるの一人もいない・・・

53 :デフォルトの名無しさん:2012/11/29(木) 12:17:23.26
楽しみは最後までとっておくタイプ

54 :デフォルトの名無しさん:2012/11/29(木) 13:30:43.87
>>47
Excel2000の時代にはウィンドウハンドルが簡単に拾えるApplication.Hwnd なんて
便利なものは無かったからな。
Excel2000も守備範囲なら API FindWindow でExcelのウィンドウハンドルを取得
するようにしておけば新旧Excelで使える。数行増えるだけだし。
ってVBAからだんだん離れるのであとはググれ

55 :デフォルトの名無しさん:2012/11/29(木) 17:50:02.29
>>50
でもExcel2000は32bitしかないでしょ。
13年前のソフトだよ?

56 :デフォルトの名無しさん: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': プロシージャの呼び出し、または引数が不正です。

57 :デフォルトの名無しさん:2012/11/30(金) 18:47:30.11
strFileName = Dir() ここ

58 :デフォルトの名無しさん:2012/11/30(金) 19:08:22.96
>>57
エラーの起きる場所は分かってるのですが
strFileName = Dir()  ← なぜここでエラーになりますか?

ネットで解説されたコードをそのまま利用しているのですが
その解説サイトの人は特にエラー発生の可能性については言及していませんでした。

59 :デフォルトの名無しさん:2012/11/30(金) 19:16:01.88
>>56
これが全ソースコード?
このコードだけをサブプロシージャにしてエラーが出るの?
変数の命名ルールがキショいね

60 :桃白白:2012/11/30(金) 19:24:36.72
>>56
そのコードには問題ないアルよ。
最初のDirを忘れてたり再帰でぐーるぐるしてたりするんじゃない?
桃白白はそういう疑念を持っています。

61 :デフォルトの名無しさん:2012/11/30(金) 19:25:31.16
strFileNameをint指定してるのに、Dir()格納できねええだろ

フォルダ名一覧取得するためにstrFileNameとやらの中身に入れるなら別のstring型変数いれないと

62 :デフォルトの名無しさん:2012/11/30(金) 19:28:37.98
あ、ごめん適当なこといった

C:\testってちゃんとフォルダが存在するよね?

63 :デフォルトの名無しさん:2012/11/30(金) 19:43:20.30
Adodbオブジェクトは実は全力の5%位の力しか使っていないと聞きました。全力を使ったらどうなるのでしょうか?地球が壊れますか?また、どんなメソッドが使えるのでしょう。
良かったら教えて下さい

64 :デフォルトの名無しさん:2012/11/30(金) 19:44:13.23
>>56
こいつ・・・動くぞ・・・!

65 :デフォルトの名無しさん:2012/11/30(金) 20:01:42.85
>>56
tempフォルダかその中のファイルに、アクセス権のないのがあるんじゃ?

66 :56:2012/11/30(金) 20:02:47.65
>>59
問題となる部分のコードです。
一部ネット上に転がっていたソースを流用している為です。

>>60 >>61 >>62
再起処理はやっておりません。
また、 c:\test も存在しています。

私の環境が問題なのかなぁ?

Excel2010 でマクロ組んでるんですけどん。

67 :デフォルトの名無しさん:2012/11/30(金) 20:50:27.10
>>65
tempじゃなくてtestだった
フォルダなくてもエラーにはならないっぽいから、フォルダはあるのに
ファイルかフォルダにアクセス権ないんじゃ?

68 :デフォルトの名無しさん:2012/11/30(金) 20:58:36.04
>>66
問題となる部分かどうかはお前が判断するな
全コードを提示して

69 :デフォルトの名無しさん:2012/11/30(金) 21:13:43.14
普通にExcelで、セルの色とかフォントの色を変えたいとき
ツールバーの該当コマンドボタンの▼をクリックするとカラーパレットが展開されて
そこから色を選ぶことができるんだけど

例えば
セルに下線を引くマクロを作ったとして、複数セルを選択し
・マクロボタンの▼をクリックして、カラーパレットが展開されて、「カラーを選んで下線を引く」

フォントの既定組み合わせ{明朝11、明朝13、ゴシック10、ゴシック11、ゴシック13}等を設定しておき
・マクロボタンの▼をクリックして、フォント・フォントサイズの組み合わせから選択して「フォントを変更する」

みたいなことってできますか?

70 :デフォルトの名無しさん:2012/11/30(金) 21:36:36.33
できる

71 :デフォルトの名無しさん:2012/11/30(金) 22:18:21.46
右クリックやツールバーからできることは大体できる
書式設定とか普通

72 :デフォルトの名無しさん:2012/11/30(金) 22:52:14.28
>>66
ちなみにエラーが発生したとき、
変数"file_count"の値はどうなってます?
(コード中断時に file_count の上にマウスカーソル持ってくれば値が表示されます)

73 :デフォルトの名無しさん:2012/12/01(土) 00:57:31.13
>>72
ありがとうございます。
どうしてもDirを使った方法だとできなかったので Fileうんたらの方法を使ってうまくいきました。

74 :デフォルトの名無しさん:2012/12/01(土) 01:39:54.57
VBA エディタで行番号を表示させる事は出来ないのでしょうか?

75 :デフォルトの名無しさん:2012/12/01(土) 01:47:50.06
>>74
アドイン公開してる人がいたような
ググればすぐに見つかるはず

76 :デフォルトの名無しさん:2012/12/01(土) 08:06:00.76
セルに入力させるにあたって、1又は9以外を入力させたくないんですが、そういうことって出来ますか?

77 :デフォルトの名無しさん:2012/12/01(土) 08:17:19.22
>>76
VBAではないが
セルに入力規則を設定して
マウスで候補を選ばせるのはどう?

78 :デフォルトの名無しさん:2012/12/01(土) 09:06:41.20
>>77
入力規則のこと忘れてました^^;
それが良いですね。ありがとです

79 :デフォルトの名無しさん:2012/12/01(土) 09:11:06.92
>>76

>>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

80 :デフォルトの名無しさん:2012/12/01(土) 09:34:57.53
>>79
ありがとう。今やってんのは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の勉強も兼ねて^^;

81 :デフォルトの名無しさん:2012/12/01(土) 11:28:36.00
そりゃだめだC3を含んだ複数セルをコピペした場合そのチェックは動かない
targetをFor EachしてC3セルだった場合にだけチェックするように書き換えないと
これはVBA以前の問題で全てのケースを洗い出す想像力大切よ

82 :デフォルトの名無しさん:2012/12/01(土) 12:17:58.08
チェンジ かつ 固定セルなら

V = Range("$C$3").Value
If V <> 1 And V <> 9 Then MsgBox "$C$3 is 1 or 9 only.", vbOKOnly

でいいじゃん入力規則でいいじゃん

83 :デフォルトの名無しさん:2012/12/01(土) 12:28:30.43
入力規則の方が高速でいいよな

84 :デフォルトの名無しさん:2012/12/01(土) 13:52:56.94
人間が介在する作業で高速もクソもないだろ
どうがんばっても人間の指の方が遅いんだから

85 :デフォルトの名無しさん:2012/12/01(土) 20:37:23.52
スループットは確かに人間が介在したらそこがネックになるけど
操作する人間に対するレスポンスが早いか遅いかって話で、操作性の問題だな
人間の感覚でとらえられないぐらいの差ならどうでもいい

86 :デフォルトの名無しさん:2012/12/01(土) 21:08:25.23
VBA で

c:\test\ を

c:\test

という具合に末尾の \ を削除したいのですがどうすれば末尾の特定文字を削除する事が出来ますか?

87 :デフォルトの名無しさん:2012/12/01(土) 21:13:58.31
自己解決


left でいけた。いkぅぅう

88 :デフォルトの名無しさん:2012/12/01(土) 21:51:02.08
>>80
それだけのためにマクロ入れたらxlsmにするとかマクロ有効にするとかで嫌がられないか?

89 :デフォルトの名無しさん:2012/12/01(土) 21:51:36.03
leftってまさか、なんでもかんでも一文字削ってるんじゃ…

90 :デフォルトの名無しさん:2012/12/02(日) 14:47:52.43
HTTP/HTTPSで通信を行い、JSONPのデータをデコードして
セルに書き出すようなExcelVBAのサンプルなどはございますでしょうか?

よろしくお願いいたします。

91 :デフォルトの名無しさん:2012/12/02(日) 15:03:44.97
そんなCOMはねえな

92 :デフォルトの名無しさん:2012/12/02(日) 15:06:15.54
と思ったらJScript使えばそのままいけるのか
「vba HTTP/HTTPSで通信を行い、JSONP」でぐぐれ

93 :デフォルトの名無しさん:2012/12/02(日) 15:49:07.67
>>92
ありがとうございmす、さっそくググってきます!

94 :デフォルトの名無しさん:2012/12/05(水) 11:38:23.57
対象バージョンは2007以降です。セルの幅と高さを初期化する方法を教えてください
ぐぐったら以下のようなコードが出てきましたが、数値で指定するのはなんだかスマートじゃない気がします

ActiveSheet.Cells.Select
Selection.RowHeight = 13.5
Selection.ColumnWidth = 8.38

例えばRowHeight.SetDefaultみたいに初期化する方法が用意されていたりはしないんでしょうか?

95 :デフォルトの名無しさん:2012/12/05(水) 13:15:35.60
会社でその部署の各個人のPCすべてに
個人用のマクロ(フォームモジュールと標準モジュールの2つのファイルがある)をインポートさせてあげたいんですが
中にはおじいちゃんおばあちゃんがいるので
手順を示すのではなくVBAに似たVBSでスクリプトを書いて
そのファイルをダブルクリックすればいいだけ、というようにしたいです。

どうすればできますか?

96 :デフォルトの名無しさん:2012/12/05(水) 13:41:30.95
>>95
とりあえずこんな感じのコードをAutoOpenに仕込めば可能だけど
Workbooks("Book1.xls").VBProject.VBComponents("Module1").Import Filename

全部で何人(何台)あるの?
作る手間と説明する手間を考えると、もし100台程度なら昼休みに自分と数人の詳しい仲間でクリックして回った方が早いよ
どんなに簡単にしても、普段と違うことはできない人、更新の指示を見落とす人なんかが年齢に関係なくいるし
設定をいじっちゃってて作ったスクリプトがうまく動かないマシンなんてのも必ず出てくる

仕事で使うんならあんまり凝ったことはせずに確実にやる方法を考えた方がいいよ

97 :デフォルトの名無しさん:2012/12/05(水) 13:50:17.79
>>96
ありがとうございます。
たしかに机を回るのも手だけど
コードもときどき更新するので
そのたびに机を回るのは今後を考えると面倒。
そのAutoOpenを検討させていただきますね。

98 :デフォルトの名無しさん:2012/12/05(水) 23:12:50.18
objIE.Document.All("BtnID").Click

これでIEのクリック操作で押せるボタンがあります
変数で使いたいので下記のようにするとエラーとなり押せません
変数を宣言しないと押せます(Variant型)
ここに使えるデータ型は何でしょうか?

Dim ID As String

ID = "BtnID"

objIE.Document.All(ID).Click

99 :デフォルトの名無しさん:2012/12/06(木) 00:10:18.70
>>98
ここには「整数または文字列」って書いてあるね
http://msdn.microsoft.com/ja-jp/library/cc410318.aspx

getelementbyidじゃダメなの?

ちなみにココはExcelの質問スレだからスレチだよ
以降は>>2に移動してね

100 :98:2012/12/06(木) 17:58:36.90
>>99
そっちに変えました
ありがとう

101 :デフォルトの名無しさん:2012/12/08(土) 18:27:44.41
配列に値を格納するのにいちいち For Nextでループしていかないと出来ないっすかね?
たとえばC13からF13に数値が入っていたとして

Dim hairetu(4) As Integer
hairetu = Range("c13:f13")

とかってすると
コンパイルエラー
配列には割り当てられません
って出るんだけど何か方法とかありません?

例は範囲が小さいからループでも大したことはないけど、これが大きくなると…と思いまして

102 :デフォルトの名無しさん:2012/12/08(土) 18:38:06.95
配列からシートへの転記は一発だったんだが、シートから配列へはちょっとめんどくさかった
for each使うとかいろいろ手段はあるけど

変数をvariant型にして
変数 = range("セル範囲")ってすれば変数にセルの内容ぶちこめる
その後配列に入れるとかするとちょっと楽

103 :デフォルトの名無しさん:2012/12/08(土) 19:17:17.62
>>102
すいません、ちょっと具体的にお願い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

〜の部分で配列に分解するのはどうするんですか?

104 :デフォルトの名無しさん:2012/12/08(土) 19:26:58.89
>>103
Sub 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

105 :デフォルトの名無しさん:2012/12/08(土) 19:36:41.51
haは配列じゃないからiでまわさない
for each in i
hairetu(変数) = i
next

二元配列の場合変数を加工
多分調べればスマートなやり方いくらでも落ちてると思う

106 :101:2012/12/08(土) 19:47:51.78
つき合っていただき、ありがとうございます

107 :デフォルトの名無しさん:2012/12/08(土) 19:59:44.60
>>105
IsArray(ha)でtrueが返ってくるのに配列じゃないの?

108 :デフォルトの名無しさん:2012/12/08(土) 20:02:30.00
配列なんだけど

なんていえばいいのやら
中みれば判るけどデータ上は二元配列になってるから普通の配列として扱うのは宜しくない

109 :デフォルトの名無しさん:2012/12/08(土) 21:25:11.94
>>108
どういうこと?
haをウォッチしてみたけど普通の二次元配列だったよ?

110 :デフォルトの名無しさん:2012/12/08(土) 21:31:38.87
>>105(>>108?)
横から失礼します
二元配列ってどういう意味ですか?
ググって見たのですがよく分かりませんでした。

いわゆるジャグ配列ということでしょうか?
それとも二次元配列のことでしょうか?

ちなみに自分はセルの値をしょっちゅうVariant変数に代入して、
それをFor Nextで加工してます。
特に何も考えずに普通に二次元配列として扱ってました。

111 :109:2012/12/08(土) 21:32:21.31
あれ?もしかして二元配列と二次元配列って別物?

112 :110:2012/12/08(土) 21:39:04.23
>>109
自分もそれが分からないから質問したんですけど、
Variant型変数にセルの値を入れたときって普通の二次元配列ですよね?

113 :デフォルトの名無しさん:2012/12/08(土) 22:04:44.84
セル範囲をバリアント型に代入したときは普通の2次元配列
単一セルのRange.Valueは配列にはならない

114 :デフォルトの名無しさん:2012/12/08(土) 22:35:47.77
range型の配列ってclone出来たっけ?

115 :デフォルトの名無しさん:2012/12/08(土) 22:48:19.06
そもそもVBAの配列にcloneなんてないはず
range型の配列ってのも何を指すかはっきりしない

116 :デフォルトの名無しさん:2012/12/08(土) 22:53:06.35
exlap.rb使ってRubyでマクロ組み込もうとしてます
Excel2007で.xlsで保存してるんだけどマクロのセキュリティはあらかじめExcelの方で設定しなきゃいけないんだよね?
有効にしても動かないしどれ選んでも動かないんだけどどうしてなの?

117 :デフォルトの名無しさん:2012/12/08(土) 23:07:12.72
ここは「ExcelのVBA」の質問のスレなんだよね?

118 :デフォルトの名無しさん:2012/12/08(土) 23:13:26.22
なんでもの方に書いたつもりでしたスマソ 移動します

119 :デフォルトの名無しさん:2012/12/09(日) 12:45:44.13
>>101
ループ回して入れたほうが速いけどVariant型変数に
hairetu = Application.Index(Range("C13:F13").Value,0)
とすればhairetuは一次元配列になってる

120 :デフォルトの名無しさん:2012/12/09(日) 12:47:25.20
すまんWorksheetFunction.Indexで良かったわ

121 :デフォルトの名無しさん: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行目も同様に[す]を軸に[す][し]=[さ]の順に濃い色をつける,ということは可能でしょうか

全くの初心者で上のプログラムを一行ずつ調べて理解するのがやっとというレベルです
アドバイスお願いします

122 :デフォルトの名無しさん:2012/12/11(火) 08:30:41.33
>>121
どの行でどのシートを参照するのかはどうやって判断するのですか?

123 :デフォルトの名無しさん:2012/12/11(火) 08:59:16.12
>>121
可能。
アドバイスとしては、>>121の仕様をコードにおこせばOK。

124 :デフォルトの名無しさん:2012/12/11(火) 10:52:04.34
>>123
そういう愚にも付かない事は書かなくてよろしい

125 :デフォルトの名無しさん:2012/12/11(火) 12:12:15.10
並べ替えのオプションとは違う話?

126 :デフォルトの名無しさん:2012/12/11(火) 12:40:05.31
セルに色をつける でググれば解決するじゃん
ソースコードの的確な場所にコードを追加するだけ

127 :デフォルトの名無しさん:2012/12/11(火) 13:02:39.70
だから


128 :デフォルトの名無しさん:2012/12/11(火) 13:16:19.00
自助努力すら出来ない人を甘やかし救うスレなのかと

129 :デフォルトの名無しさん:2012/12/11(火) 13:23:36.20
白桃が甘やかしたんだから白桃が最後まで責任持てばいいだけ

130 :デフォルトの名無しさん:2012/12/11(火) 13:59:25.92
甘やかさないならスルーしてろよ
ってだけの話

131 :デフォルトの名無しさん:2012/12/11(火) 15:34:04.81
>>130
お前に指図される覚えはない。

132 :デフォルトの名無しさん:2012/12/11(火) 16:00:06.06
自分で検索すらしない愚者に振り回されすぎだぞ。
>>121は白桃担当。

蛇足だがそもそも
>例えば,C1[う]を選択したら,Sheet2で[う]をみると関連のある順に[う][い][あ]なので
ここが、5、3、0とか解説がないから意味わからん。

検索もできない、説明もできない、そんな奴を相手に白桃さんは親切だな。登場を待とうじゃないか。

133 :デフォルトの名無しさん:2012/12/12(水) 00:00:29.79
>>121
なんか最近、3×3の9マスのソートのアルゴリズムの研究をどこかで見た気がするんだけど・・・
それ関連?

134 :デフォルトの名無しさん:2012/12/12(水) 00:51:31.80
そもそもマクロの記録すれば即解決じゃねえか
うんこにもほどがある

135 :デフォルトの名無しさん:2012/12/12(水) 01:19:38.97
>>134
どの質問に対する回答なの?
まさか>>121宛じゃないよね?
あれはマクロの記憶じゃ無理

136 :デフォルトの名無しさん:2012/12/12(水) 05:05:18.94
>>135
セルに色をつける程度ならできるだろ。

137 :デフォルトの名無しさん:2012/12/12(水) 06:52:40.23
>>135
てかさ、プログラムなんて単純な処理の集合なんだから、それを一つずつクリアして
やりたい処理に組み合わせればいいだけだろ。

単純な処理の部分についてはマクロの記録で充分。

138 :桃白白:2012/12/12(水) 07:00:05.20
>>132
このテンプレって誰が考えたのか知らんけどすてきだなと桃白白思うの。

VBプログラマ質問スレ(Ver.6.0 まで) part60
http://toro.2ch.net/test/read.cgi/tech/1351327234/
>答えられない質問は無駄に罵倒せずスルー。無理するな。

まさにお前のようなやつを諫止するためにあると思うの。お前はまじめなやつなんだと
桃白白思う。答えようと必死になるけど答えられなくてやり場のない苛立ちを
質問者にぶつけてしまう甘えんぼなんだと思う。桃白白はお前の思いを受け止めよう。
なぜならば桃白白は心が広いから。俺のことはパイパイさんと呼べ。

139 :デフォルトの名無しさん:2012/12/12(水) 09:07:21.91
パイパンさんかっけー!
マジリスペクトっす!

140 :デフォルトの名無しさん:2012/12/12(水) 10:00:23.40
あんなのに、マジで答えられないやつなんているのかよw

141 :デフォルトの名無しさん:2012/12/12(水) 10:16:05.37
>>140
せっかく白糖をおだててるんだから黙ってろ

142 :69:2012/12/12(水) 13:55:33.53
>>70-71
VBを使ってかなりややこしいことをするのかと思い、具体例を聞かなかったのですが
ふと思い出して検索してみたら、至って簡単な手順でできるのですね

ツールバーに「新しいメニュー」をペースト
さらにそのメニューに「新しいメニュー」をペースとして階層化
そこにマクロを好きなだけ貼り付けていく

条件の入力と、VBの中で細かな分岐みたいなことをしなくても
条件の違う似たようなマクロを必要なだけ作っておいてメニューで選択すればOK
たったこれだけでした

メニューバーに自作マクロをグループ分けして「新しいメニュー」を並べることもできる
VB以前の話しでしたw

143 :デフォルトの名無しさん:2012/12/12(水) 14:07:18.43
vba処理でメニュー出したり消したりできるからまあ

144 :桃白白:2012/12/13(木) 12:37:08.08
>>141
おーまーたー

>>121
桃白白実装したから試してみて
friendpaste.com/2HcrMkLVj8VbUfTrZXDCy2

>>139
桃白白、またの名を下の毛タワシ丸と申すみたいな。やめろバカ。
パイパンじゃないパイパイだ。

145 :デフォルトの名無しさん:2012/12/13(木) 13:34:59.19
この処理をwithでまとめたいのですがどうすればいいですか?
If 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

146 :デフォルトの名無しさん:2012/12/13(木) 13:40:00.47
withってそんな使い方できたかよ?

147 :デフォルトの名無しさん:2012/12/13(木) 13:49:32.80
できるが
動くが

シート名とかセル範囲とか確認してみ

148 :デフォルトの名無しさん:2012/12/13(木) 13:51:05.87
A20に初めから1って入ってて気づかないか、B2を見てるかに3000ペリカ

149 :デフォルトの名無しさん:2012/12/13(木) 13:52:59.09
B20だ
A20が1じゃない可能性もあるな

150 :デフォルトの名無しさん:2012/12/13(木) 15:02:02.37
>上手くいきません


単に上手くいかないってだけでなくどう上手くいかないんだよ。それを説明しる

151 :デフォルトの名無しさん:2012/12/13(木) 15:26:30.52
.Valueがないとか関係あるんだろうか

152 :デフォルトの名無しさん:2012/12/13(木) 18:32:15.83
Withステートメントをネストしてるとか。

With hoge
 With Foo
  処理
 End With
End With

153 :デフォルトの名無しさん:2012/12/13(木) 19:57:45.59
処理は正常だが気づかんだけだろう

154 :デフォルトの名無しさん:2012/12/13(木) 21:12:09.91
withのダブルネストでも動く
システムメッセージが出ないってことはエラーも何も発生しておらず、正常に動作してるんだろう

155 :リリン:2012/12/13(木) 21:13:23.50 ?PLT(45072)
withってホワイトスペースはさんでてもおkなの?

156 :デフォルトの名無しさん:2012/12/13(木) 21:15:05.61
挟まないと動作しないが・・・どういう意味で?

157 :デフォルトの名無しさん:2012/12/13(木) 21:23:40.44
>>145 は記述上何も問題ないだろ。盛り上がり過ぎやで。

158 :デフォルトの名無しさん:2012/12/13(木) 21:32:33.05
暇だし簡単な案件だし質問者が出てこないから、他の質問でもないとしょうがない

159 :デフォルトの名無しさん:2012/12/14(金) 16:24:33.22
>>158
では質問

ツールバーにある「塗りつぶし」ボタン
現在設定の色がボタンに表示されている
ボタンクリックで、指定セルがその色に変わる

ボタン右の▼をクリックすると
カラーパレットの表示された窓が開き、各パレットをクリックすると
指定セルの色が変わる

またパレットの上端をドラッグするとパレット自体をツールバーから切り離して
好きな場所に移動でき、かつ×ボタンで閉じることができる

このパレットに色ではなくてマクロボタンを配置して使いたいと考えたことがあるんだけど
あるワークシートの作業をするときに使用するマクロのグループをパレット上に配置し
作業をするときだけ、パレットを切り離して作業しやすいところに常時表示させて
ダイレクトにマクロボタンを操作できるようにする
使わないときは呼び出しボタン(「塗りつぶし」ボタンみたいなイメージ)だけツールバー上にあり
必要なときにパレットを表示して使う

みたいなことはどうやればできますか?
ツールバーを作れば似たようなことはできますが

160 :デフォルトの名無しさん:2012/12/14(金) 16:30:05.45
ツールバーでええやん

161 :デフォルトの名無しさん:2012/12/14(金) 22:32:13.78
>>144
ありがとうございます
これをもとに書き換えてシステム実装していこうと思っているのですが
63行目でアプリケーション定義またはオブジェクト定義のエラーが出てしまいます
その前にもユーザ定義型は定義されていませんと出たのですがツールの参照設定を変更して出なくなりました

162 :161:2012/12/14(金) 23:36:33.23
>>144
できました!ありがとうございます!
本当に嬉しいです心から感謝です
まだまだ解読途中ですががんばります

163 :デフォルトの名無しさん:2012/12/15(土) 05:14:55.86
パイパンか。
いいこと聞いたw

164 :デフォルトの名無しさん:2012/12/16(日) 18:41:27.14
質問です

VBAでWorksheetFunction.NormSInv(Rnd)を2万回行うと、時折「取得できませんでした」というエラーで止まります
普通に2万回計算を終えて終了することもあります

エクセルシート上で関数=normsinv(rand())を計算し、値で別シートに貼り付けて保存する
再計算を行って2万回これを繰り返すというマクロにすると、今のところ一度もNUM!という結果が現れていません

VBAのWorksheetFunction.NormSInv(Rnd)がエラーで時折停止する理由を教えていただけないでしょうか
ランダム数で0を取得してしまい、NORMINV(0)=NUM!と同じことになっているのだろうと現在推測しているのですが
そうするとエクセルシート上で=normsinv(rand())を行っても同じ頻度でNUM!が結果に出ていてもいいと思われるので
根本的にマクロを間違っているのでしょうか
それともVBAのRndとエクセルシート上で使うRand()は別のものなのでしょうか

どうぞよろしくお願いします

165 :デフォルトの名無しさん:2012/12/16(日) 18:52:24.70
二万回も何すんだよ

166 :デフォルトの名無しさん:2012/12/16(日) 18:53:34.04
>>164
何が質問?

167 :デフォルトの名無しさん:2012/12/16(日) 19:02:24.59
>>164
別物と言えば別物ではあるけど、ヘルプを見る限り、どちらも0以上1未満の数値を返す
つまりどっちにしても0でエラーになる可能性はあるわけで、単に確率の問題だと思われ

ヘルプに反してRandがゼロを返さない可能性も無いではないが

168 :デフォルトの名無しさん:2012/12/16(日) 19:18:09.58
伝えるのを忘れていました
windows7、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回を超えたくらいでこのエラーで停止しました

169 :デフォルトの名無しさん:2012/12/16(日) 19:32:59.77
>>168
エラーで止まるとかよりrndで0が返るか確認すればいいのにとおもた

170 :デフォルトの名無しさん:2012/12/16(日) 19:35:16.42
>>169
その通りですね
Rndをひたすら繰り返してみます
ありがとうございます

171 :デフォルトの名無しさん:2012/12/16(日) 19:39:51.41
>>168
乱数つかって再現性とか...シード指定しろよ
>VBAにおいてWorksheetFunction.NormSInv(Rnd)が「取得できませんでした」とエラーで停止する理由
Rndがゼロを返すから
>VBAのRndとエクセルシート上で使用するRAND()は完全に同じものか
完全に同じものではない

172 :デフォルトの名無しさん:2012/12/16(日) 20:08:02.63
>>171
ありがとうざいます
シードについて、まずは勉強していきます
不勉強で申し訳ございませんでした

173 :デフォルトの名無しさん:2012/12/16(日) 20:44:01.42
>>168
頻度に差があるので気になっていますって
2万回なら頻度に差が出て当然だと思う
Excelの問題じゃない

174 :デフォルトの名無しさん: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とできる方法がありますでしょうか。

175 :デフォルトの名無しさん:2012/12/16(日) 21:14:29.12
>>174
法則がわからない
分数の分母にマイナスを付ければいいの?

176 :デフォルトの名無しさん:2012/12/16(日) 21:17:21.36
>>174
AとBは50/100か100/50の2通りだけ?

177 :デフォルトの名無しさん:2012/12/16(日) 21:18:53.55
>>175-176
普通にやると、項目Cのセルに、
IF(A1>A2,A1/A2,-(A1/A2))
とやればいいんですが、なんかスマートじゃないなぁと思いまして。
項目A,Bにはいろんな数字が来ます。ただし、A÷Bの順番は変えられません。

他にパッとするやり方があれば教えていただければ助かります。

178 :デフォルトの名無しさん:2012/12/16(日) 21:26:24.17
それでいいんじゃね?

179 :デフォルトの名無しさん:2012/12/16(日) 21:29:23.95
>>177
VBAにIF演算子はないと思うぞ

180 :デフォルトの名無しさん:2012/12/16(日) 21:54:04.85
>>177
その式だとA1に50、A2に100が入っていた場合、-2じゃなくて-0.5になると思うけど、
本当にやりたいことはなんなの?

181 :デフォルトの名無しさん:2012/12/17(月) 08:50:23.90
IF(A1>A2,A1/A2,-(A2/A1))
の間違いでしょ。それよりVBAなのかそうじゃないのかどっちよ

IFを使わずに書くこともできるけど、たぶんかえって長くなると思う

182 :デフォルトの名無しさん:2012/12/17(月) 10:27:31.92
VBA使う必要ないよな

183 :デフォルトの名無しさん:2012/12/17(月) 11:12:51.70
>>181
ただし、A÷Bの順番は変えられません。

184 :デフォルトの名無しさん:2012/12/17(月) 12:54:23.48
指数使えば?

185 :リリン:2012/12/17(月) 13:41:31.81 ?PLT(45072)
Excelもってないんだけどどうすればいいですか、っと。

186 :デフォルトの名無しさん:2012/12/17(月) 13:49:55.56
>>185
買えば?

187 :デフォルトの名無しさん:2012/12/17(月) 14:38:07.73
dotnetとテキストで1から作れば?

188 :デフォルトの名無しさん:2012/12/18(火) 13:21:48.54
>>144
度々すみません
すべての行に対してソートを行うにはどこを書き換えれば良いでしょうか
色無し(121のリンク先)の時はコードを書き換えてすべての行を自由に選択→そこを軸にソートができたのですが
色がついたとたんに理解力が及ばなくなってしまいました…

189 :桃白白:2012/12/18(火) 13:32:17.62
>>188
これの92行目のsh1.Range("A1:C3")のとこ。
https://friendpaste.com/2HcrMkLVj8VbUfTrZXDCy2

190 :デフォルトの名無しさん:2012/12/18(火) 14:08:24.34
>>189
選択範囲は変わらない気がするのですが…

191 :デフォルトの名無しさん:2012/12/18(火) 16:38:06.10
>>189
ごめんなさい,もう少しヒントを頂きたいです
実際に組んでるものは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「インデックスが有効範囲にありません」です
どこか変更したりないのだと思いますがじっくり見ていってもどこだかわかりません
よろしくお願いします

192 :デフォルトの名無しさん:2012/12/18(火) 16:39:26.41
>>191
書き忘れました
エラーが出るのは29行目の
Set GetSheet = Excel.Worksheets(rowNum - 7)
で調べたらrowNum=1になってしまっています

193 :桃白白:2012/12/18(火) 17:43:06.32
>>192
ぇ・・・なんでだろ。C9:AG21の範囲でどれかひとつのセルが選択されると。
9行目から21行目に対応する関連度が書かれたシートがあると。
そうすると問題はカラーリングのところかしら。いまはソートされたところ
全部の関連度を引っ張ってきてそれを元に色付けするようになってる。
ソートする範囲と色付けする範囲が違ってたりしちゃうわけ?
まあまずはあれだな、原因を特定しなきゃいけないな。
' Coloring以降のコードをごっそり削除しても例外でる?

194 :デフォルトの名無しさん:2012/12/18(火) 17:49:57.27
>>193
97〜114行目を削除したらエラーは出ませんでしたがマクロは実行されていませんとなりました

195 :桃白白:2012/12/18(火) 18:10:16.66
>>194
ん?どゆこと?マクロが実行されなかった?
94行目は間違ってた。1をrowNumにして。
Call Sort(v, rowNum, GetRels(rowNum, char1))

色づけする範囲はC9:AG21?

196 :デフォルトの名無しさん:2012/12/18(火) 18:15:37.87
>>195
ありがとうございます結婚してください
色付けの範囲はC9:AG21です
マクロの実行は私の勘違いでした(マクロの記録は現在行われておりませんの見間違い)
94行目を直して97〜114行目を削除したところ,色なしでのソートがうまくいきました
そのまま実行すると「インデックスが有効範囲にありません。(Error 9)」です

197 :デフォルトの名無しさん:2012/12/18(火) 18:20:53.88
そろそろうざいな

198 :デフォルトの名無しさん:2012/12/18(火) 18:23:49.91
読むからウザく感じる
読まずにスルーすればいいんだよ

199 :デフォルトの名無しさん:2012/12/18(火) 18:30:35.76
丸投げのようで頑張ってるみたいだからいいんじゃね
今後馴れ合いしなければ

200 :デフォルトの名無しさん:2012/12/18(火) 18:48:31.96
>>196
Coloring削除しても少しソートがうまくいかない部分がありました
ソートのみで間違いなく動くプログラムがこれです
friendpaste.com/21WFtusmIesUcgQ8eqvUpC
スレ汚しごめんなさい スレチでしたら誘導願います

201 :デフォルトの名無しさん:2012/12/18(火) 18:57:23.87
>>200
スレ汚しごめんなさいって確信犯なのかよ…
やさしいから誘導してあげるよ
http://www.lancers.jp/

202 :デフォルトの名無しさん:2012/12/18(火) 19:08:24.46
おまえやさしくないやつだな

203 :桃白白:2012/12/18(火) 19:15:43.20
>>201
つまらないものですがといって粗品と書かれた品物を渡されたら怒り狂うタイプ?
謙遜の心を知らずして日本で生きていくのはさぞかしつらいだろう。桃白白の手元に
バールのようなものがあったなら仁恵あふれる桃白白がお前の胸部に慈悲深い一撃をくれてやりたい。

204 :デフォルトの名無しさん:2012/12/18(火) 20:14:36.44
できない

205 :デフォルトの名無しさん:2012/12/18(火) 20:27:00.32
糞白白はいちいちうざくてきもちわるい

206 :デフォルトの名無しさん:2012/12/18(火) 20:39:39.13
>>205
おまえもナー

207 :デフォルトの名無しさん:2012/12/18(火) 20:50:43.71
>>200のコードをもとに色を付けることはできませんか?

208 :デフォルトの名無しさん:2012/12/18(火) 22:12:49.04
>手元にバールのようなものがあったならお前の胸部に一撃をくれてやりたい。

殺すぞって言ってるようだが気持ち悪くないのか?
気持ち悪いだろ。キチガイと言っていいレベル。

209 :デフォルトの名無しさん:2012/12/18(火) 22:28:14.49
【嫌儲プログラミング部】 C#でネイティブアプリの開発が可能に!ポトペタもできる!C++厨憤死www
http://engawa.2ch.net/test/read.cgi/poverty/1355832436/l50

お前らvba版つくってくれ

210 :デフォルトの名無しさん:2012/12/18(火) 22:43:32.40
>>203
パンパンさん通報しました

211 :桃白白:2012/12/19(水) 13:29:09.45
>>200
関連度の参照の仕方が違うみたいだな。
前のやつは縦を検索して横を参照してたけど、
今のやつは横を検索して縦を参照してる。

>>207
これでどう?
https://friendpaste.com/21WFtusmIesUcgQ8erCnEa

>>210
パンパンってなんかあのときのあれみたいだよな、いやらしい、桃白白はそんなお前を軽蔑しちゃう。

212 :デフォルトの名無しさん:2012/12/19(水) 13:36:24.25
パンパンか。
いいこと聞いたw

213 :デフォルトの名無しさん:2012/12/19(水) 14:58:10.20
カンフーパンダっているじゃん
あーゆーやつで、道(タオ・ハンタの念とか、ドラゴンボールの気みたいなやつ)の使い手にパンパンっていたんだよ
パンダだからパンパン。

卑猥とかあのときのあれとか
パンパンかパイパンかどっちかにしなさいよ!

214 :デフォルトの名無しさん:2012/12/19(水) 15:49:38.56
直接ExcelVBAの質問ではないのですが
白桃桃という人はOfficeTANAKAみたいに
ExcelVBAの世界ではそこそこ有名な人なんでしょうか?

215 :デフォルトの名無しさん:2012/12/19(水) 17:18:31.52
キチガイで有名ではあるがそれだけだ

216 :デフォルトの名無しさん:2012/12/19(水) 17:22:53.02
Imageオブジェクトを指定するとして、
オブジェクト名以外に、一つ目のImage、二つ目のImageというような
数値で指定する方法って無いんでしょうか
シートやセル範囲だと、sheets(2)とかcells(1,2)というふうに数値で指定できますよね。
しょうもない質問でしょうがどなたかお願いします

217 :デフォルトの名無しさん:2012/12/19(水) 17:32:33.36
>>216
excel.pictures

218 :デフォルトの名無しさん:2012/12/19(水) 17:48:35.50
>>216
.Shapes

219 :デフォルトの名無しさん:2012/12/19(水) 17:53:50.09
>>217-218
レスありがとうございます
まだ、そのワードで調べてる途中で理解できていませんが
時間かかりそうなので、ひとまずお礼だけ言っておきます。

220 :デフォルトの名無しさん:2012/12/19(水) 21:06:10.16
OS:winXPSP3、 Ver:Excel2003

マクロ実行時以外ではマクロ関数が算出しないようにする方法があれば教えてください。


ワークシート関数に無い機能が欲しくて、マクロ関数を作ってあります。

マクロ修正のためVisualBasicEditorを開いたままの状態でシートのセル値を変更します。
すると、マクロ関数が機能し延々と算出し始めます。
マクロ修正中はマクロ関数が機能しなくてもいいので、止められるなら止めておきたいです。

221 :デフォルトの名無しさん:2012/12/19(水) 21:48:29.92
>>220
マクロが動く条件何にしてるの?
特定のセルに入力したら、とかアクティブセルを変えたら、とか
発動条件自分で書いてるはずだけど、
それをボタンを押したら、とかに変えればいいじゃん。
あるいは手間を惜しまないなら、発動する部分を毎回コメントアウトする。

222 :デフォルトの名無しさん:2012/12/19(水) 21:55:11.37
>>220
例えばDebugとかCodingとかの名前でパブリックでスタティックな変数を用意して
対象のマクロ関数でGet、別途Setプロシージャを用意するとか

223 :デフォルトの名無しさん:2012/12/19(水) 23:07:34.85
手動計算は?

224 :デフォルトの名無しさん:2012/12/20(木) 05:05:16.59
世代の差かねぇ、
パンパンといったらこれを連想してしまうんだが、
今の人は知らないんだろうね
http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%B3%E3%83%91%E3%83%B3

225 :デフォルトの名無しさん:2012/12/20(木) 08:42:29.16
普通のおっさんでもパンダのパンパンくらいだと思うぞ
北京五輪だったか

226 :デフォルトの名無しさん:2012/12/20(木) 10:29:53.28
並び替え(sort)で、ユーザ定義のものみたいなのを使いたいんですが
その文字列の順序を変数から指定するにはどうしたらいいですか?

(この質問は中級者以上じゃないと言ってる意味がわからないかもしれませんが)

227 :デフォルトの名無しさん:2012/12/20(木) 10:34:34.17
エスパー中級が必要か……

228 :デフォルトの名無しさん:2012/12/20(木) 12:21:56.95
>>227
あれはもう何年も前、いいえ2日前のことです。桃白白はぐりとぐらが作った特大の
カステラが食べたいと思いながら眠りにつきました。夜中にふと目が覚めました。
あたりが昼間のように明るいのです。体があたたかくてやわらかい黄色い光りに
つつまれていました。そうカステラと一体化したのです。それいらい桃白白は
エスパー能力を身につけました。

ユーザー定義といったらType。
>>226は一字一句間違いなくこう書いている。
Type Castella
Guri As String
Gura As String
End Type

229 :デフォルトの名無しさん:2012/12/20(木) 15:11:40.70
シートの並べ替えってオプション指定する、優先文字列の列挙だよな
Type で定義してんのかあれ
参考にさせてもらおう

230 :デフォルトの名無しさん:2012/12/20(木) 15:31:11.84
シートソートなら
カスタムリストのidゲットして、add customlist=arr(文字列)
並べ替えのときにordercustom:=カスタムリストのid
でいいんじゃないか
構造体とか使うのか

231 :デフォルトの名無しさん:2012/12/20(木) 15:35:50.26
おいおい、わざわざ中級とか言ってるんだから超上級、ウィザード級VBA使い手に決まってる
TYPE とかソートなんて初心者みたいな質問するわけないだろ
調べれば出てくるような、そんなレベルの低い答えばわけないだろ

232 :デフォルトの名無しさん:2012/12/21(金) 11:45:16.47
あっ

233 :デフォルトの名無しさん:2012/12/22(土) 22:09:18.76
そんなに複雑なプログラムじゃないのに30分以上かかってるんだがありえるのか?
どっかで循環してんのか?
確かにデータは5万近くあるが

234 :デフォルトの名無しさん:2012/12/22(土) 22:43:15.59
再計算と画面の書き換え止めろ

235 :デフォルトの名無しさん:2012/12/22(土) 23:04:44.32
5万程度で30分とかどんな処理してるんだ
五年前のXPノートでも3秒かそこらだろう
どんなコード?

236 :デフォルトの名無しさん:2012/12/22(土) 23:22:39.12
改行が入ってるセルが数万行あるようなExcelファイルの場合は数セル操作するのに1分とかよくある

237 :デフォルトの名無しさん:2012/12/23(日) 01:21:41.29
だから画面の書き換え止めろって

238 :デフォルトの名無しさん:2012/12/23(日) 01:30:04.90
今回の件とは関係ないと思うけど、100,200程度のレコードを追加していく処理で、
レコードの追加に合わせて印刷範囲を随時拡げていくという処理を入れたらふじこふじこ
レコードの追加の完了後に印刷範囲を拡げるという処理にしたらシャキィーン!だった。
つまり何が言いたいかって言うとさ、印刷範囲を随時拡げていくという処理は重いって事だよ。

239 :デフォルトの名無しさん:2012/12/23(日) 01:55:57.67
>>238
なんのために随時広げる必要があったんだ?

240 :デフォルトの名無しさん:2012/12/23(日) 02:02:49.76
よくあることだよ
最初のうちは複数回呼ばれることを想定してなかったからメソッドを分けてなかった

241 :デフォルトの名無しさん:2012/12/23(日) 02:08:05.78
>>240
そうそう、よくあることなんだよね。
>>230
いやほら、なんかかっこいいじゃん。

242 :デフォルトの名無しさん:2012/12/23(日) 02:08:56.91
>>240
そうそう、よくあることなんだよね。
>>239
いやほら、なんかかっこいいじゃん。
>>241
みすった、すみませんこれなしで。

243 :デフォルトの名無しさん:2012/12/23(日) 09:00:39.04
人間がせいぜい待てる時間は3秒から5秒くらいだろ?
Unionとか使うと平気で3時間とかはかかるけど

244 :デフォルトの名無しさん:2012/12/23(日) 12:09:25.55
VBAを使って、yahooファイナンスから4000行10列くらいの株価データを
エクセルシートにダウンロードしてるんだけど、全て終わるまでに30分くらいかかる。

どうにかして速くする方法ない?
データを配列に入れて、rangeオブジェクトに張るの試したけどあんま変わらなかった。

245 :デフォルトの名無しさん:2012/12/23(日) 12:18:36.85
>>244
おれも似たようなことやってるけど、
約1000銘柄200日分で20万行の処理に
20分くらいしかかかってないぞ。

246 :デフォルトの名無しさん:2012/12/23(日) 12:29:50.45
どういうコードを書いていて、どの部分にどのくらい時間が掛かってるのかも示さずでは
速くする方法どころか、速くできるか否かすら解んねーよw

まあそんなことにも気付かず不適切な質問しちゃうくらい頭の弱い子なわけだから
改善の余地がありまくりなのは間違いないだろうがな

因みに、ダウンロードに時間が掛かってるなら、むしろそれは改善可能でも改善すべきじゃない
広告を見てくれることを前提に無料で提供してくれているデータを、広告も見ずにぶっこ抜きしてる時点で
「大変申し訳ない」「時間が掛かろうと無料で得られるだけで非常にありがたい」という態度で居るべきなのに
それを相手先の鯖負荷も考えずに、身勝手な自己都合だけで高速化(=鯖の高負荷化)するなんてのは
技術的に可能でも、人としてやるべきではないからね

247 :デフォルトの名無しさん:2012/12/23(日) 12:47:48.38
>>244
とりあえずコード晒せ
回線や鯖の問題でなければいくらでも高速化できる
その結果アク禁や有料化されても俺は知らんけどな

248 :デフォルトの名無しさん:2012/12/23(日) 14:46:21.97
Variant型変数を配列で使う場合の
使い方や注意点をすべて教えていただけませんか?

ちなみにまだ使ったことのない初心者ですのでそこを考慮願います。

249 :デフォルトの名無しさん:2012/12/23(日) 14:49:19.40
>>248
別にないよ
Variant型以外の配列と同様に扱えばよし

250 :248:2012/12/23(日) 15:52:46.50
いや例えば配列のくせに( )を使わないときもあるだろ
どういうとき( )を書かなくていいとか書くべきとか
いろいろ注意点はあるはずだ。

251 :デフォルトの名無しさん:2012/12/23(日) 16:23:30.95
は?

252 :桃白白:2012/12/23(日) 16:26:56.43
>>250
ないよ。いつからあるって錯覚してた?ないよ。そんなの。
徳川の埋蔵金みたいなもんだろ。あると夢を見続ける人は
絶えない。そう思わせることに価値があるのかもしれないな。
桃白白はしんみりとそう思う。

253 :デフォルトの名無しさん:2012/12/23(日) 18:28:40.97
ももしろしろは黙ってろよ

254 :デフォルトの名無しさん:2012/12/23(日) 18:36:07.16
Variant変数を()付きで宣言した場合は、配列のみが代入できる。
更に上限・下限を指定した場合、それに一致する配列のみが代入できる。
代入できるものに制限を付けるかどうかだけの違いで、使う分には全く変わらない。

255 :デフォルトの名無しさん:2012/12/23(日) 18:36:29.27
とりあえずしゃぶれや。

256 :248:2012/12/23(日) 19:01:30.70
>>254
ありがちょう。
こういうレスがほしかったです。
すこし賢くなりました。

しかし悲しいかな「知れば知るほど、分からないことが増える」というニュースの池上の名言のように
()のみは1次元となるのか
( , )とコンマだけ入れると上限下限の2次元となり、ほんとうに例えば test(500,1000)みたいな大きな数も自由に代入できるのか
VBAでフィルターかけるときのCriteriaでこのVariant変数が使えるのは1次元のときのみなのか
その他いろいろ
さらに不明点が倍増しました。

257 :デフォルトの名無しさん:2012/12/23(日) 19:01:33.81
>>248
>Variant型変数を配列で使う場合
じゃなくて
Variant型変数で配列を使う場合
というべきじゃね?
Variant型変数にrangeを代入すると
変数の中身は配列になるけど()は付けないよね。
んで、配列の中の要素をいじるときには()使うけど、
そういう話かな?

258 :桃白白:2012/12/23(日) 19:10:04.01
埋蔵金の話だろ。

259 :248:2012/12/23(日) 19:10:30.20
>>257
はい、そういう話です。
Variantという自由なものをつくったばっかりに
いろんな場合が想定できるので逆にコード書く人にとっては把握事項が増えて実に使いにくいものとなった例だと思うんです。

260 :デフォルトの名無しさん:2012/12/23(日) 20:00:36.24
VBAの基礎のオートメーション自体が、
型が曖昧でも適当に動くようにする方針で設計されていたからなあ。
ある程度型宣言が可能なVBAで違和感を覚えるのは、しようがないところか。
JavaScript位吹っ切れていれば全く気にならなくなるのだけどw

261 :デフォルトの名無しさん:2012/12/24(月) 00:08:29.24
>>257
>Variant型変数にrangeを代入すると
>変数の中身は配列になるけど()は付けないよね。

それもちょっと違う
Variant以外でも配列全体に代入するときは括弧は付けないから、
それはVariant型で配列を使うときの注意点じゃない

Dim b() As String
b = Split("a,b,c", ",")
MsgBox b(0)

262 :デフォルトの名無しさん:2012/12/24(月) 00:15:41.81
内部がvariant型じゃなくなる、配列以外で使えなくなるとかそんなかんじ

263 :デフォルトの名無しさん:2012/12/24(月) 02:14:06.96
他の言語もやっておいたほうがいい

264 :デフォルトの名無しさん:2012/12/24(月) 02:21:23.10
Excelに関係ないからVBAなんでものスレに移動してくれ

265 :デフォルトの名無しさん:2012/12/24(月) 07:28:36.70
>>261
宣言で括弧つけてる(=動的配列変数として宣言してる)じゃん
Variant型だとそんなのお構いなし

266 :デフォルトの名無しさん:2012/12/24(月) 10:49:48.02
こっち行けってば
http://toro.2ch.net/test/read.cgi/tech/1342087380/

267 :デフォルトの名無しさん:2012/12/24(月) 11:19:16.82
一人で行ってろタコ

268 :デフォルトの名無しさん:2012/12/24(月) 14:29:45.74
クラス モジュールで実装したクラスを、クラス名から動的にインスタンス化する方法ってないだろうか。

VBAProject
 - 標準モジュール
  + 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 を作ってそこもメンテさせるってのはちと不味い)のだが、良い方法ないもんかな

269 :268:2012/12/24(月) 14:31:35.93
CreateObjectは当然COMでもなんでもないクラスモジュールを扱えないし、
Appication.EvaluateやCallByNameはNewできないし、
Vbs.Evalじゃプロジェクト内部のクラスモジュールまではあずかり知りません、だし、
うまく解決するすべがないものかと・・・。

270 :デフォルトの名無しさん:2012/12/24(月) 14:35:34.50
>>268
>>2

271 :268:2012/12/24(月) 14:47:33.53
>>270
失敬。間違えた。誘導先で聞くわ。サンクス

272 :デフォルトの名無しさん:2012/12/24(月) 15:35:10.75
>>266
人が少ないスレに行く意味がわからん。
自分で建てたけど使われないからってみっともなw

273 :デフォルトの名無しさん:2012/12/24(月) 16:41:45.85


274 :デフォルトの名無しさん:2012/12/24(月) 17:37:17.22
>>244
Application.screenUpdatingだっけ?入れてる?

275 :デフォルトの名無しさん:2012/12/24(月) 19:20:37.69
>>274
入れてました。若干速くなる気もするけど、せいぜい2分位です。
その間、セルに貼り付けてる過程が見れないので、2分短縮するくらいなら外した方がいいと思って
今は外してます。

ソースは本当にシンプルなので、問題があるとすればサイトへのアクセスの仕方かなぁ・・・

276 :デフォルトの名無しさん:2012/12/24(月) 19:22:48.72
>>275
プロファイラ使えよ

277 :デフォルトの名無しさん:2012/12/24(月) 20:26:44.98
>>275
他の人も言ってるけどソース見せてくれないの?
ソース見ないことには判断出来ないっすよ

278 :デフォルトの名無しさん:2012/12/25(火) 11:48:35.69
>>268
それ、普通は
sub ShowList(byref obj as Files)
 'objを使ったリスト化処理
end sub

sub foo()
 showlist new TreeFiles
showlist new ListFiles
end sub
みたいにやるんだけど、なんでそうしないの?

279 :デフォルトの名無しさん:2012/12/25(火) 15:10:16.71
>>275
おい!ソース見せろや!おい!
指摘できんやろが!

280 :デフォルトの名無しさん:2012/12/25(火) 22:59:11.70
>>276
kwsk

>>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文の中の処理が問題という訳ではないです。
何が悪いんだ・・・

281 :デフォルトの名無しさん:2012/12/25(火) 23:54:35.85
そういや昔図書館のサイトにクローラでアクセスして逮捕された人がいたっけ

282 :デフォルトの名無しさん:2012/12/26(水) 00:03:28.66
うっすらと記憶になるな。
図書館を対象にした処理ではなく、別の目的のテストとして図書館を対象に処理してたんだっけ。
公共なのに糞サバなのが悪いだろアフォかとかいう意見もあったっけ。
Yahooなら個人が何をしても問題になんてならないと思うけど。

>>280
IF文内の以下略じゃなくて単にFor文の問題って言いたい。でいいのかな。
oHTTPも全然関係ないと。

283 :デフォルトの名無しさん:2012/12/26(水) 00:39:09.50
あれは警察も管理者もみんなネットやコンピューターの知識が皆無だった
裁判でちゃんと無罪になってる

最近のなりすまし誤認逮捕以上に恥ずかしい事件だったんで、結末もひっそりとしか報道されなかった
おかげで、いまだに連続アクセスすると逮捕されるとか寝言を言うバカ>>281がいる

284 :デフォルトの名無しさん:2012/12/26(水) 01:03:02.70
クローラーを作ってる側に知識や常識がないとかなりキツいけどね

285 :デフォルトの名無しさん:2012/12/26(水) 01:24:17.46
>>283
逮捕されてるじゃん

286 :桃白白:2012/12/26(水) 02:03:06.78
>>280
通信速度の限界じゃね。
桃白白のFirefoxでこれにアクセスしたら送信から受信まで平均0.5秒だった。
http://stocks.finance.yahoo.co.jp/stocks/detail/?code=1000
20分だと2400件取得できる。まあそんなもんだろ。
非同期でリクエスト送りまくっちゃったらすこし速くなるだろうけど、
まああんま変わんないんじゃね。仕方ないんじゃね。桃白白そう思うんじゃね。

287 :デフォルトの名無しさん:2012/12/26(水) 02:59:59.35
調べてみた

YAHOOの鯖が遅いだけだね
平均すると1ページあたり0.3秒ぐらいかかってる
公開されてるのは3439銘柄だから、単純計算で15分以上かかることになる

試しに非同期でやってみたら2分で終わったけど、やるなら自己責任でね
それよりも、株価を公開してるサイトはたくさんあるから、もっと軽いサイトを探した方がいいかも

あと、何度か走らせたらガベージコレクションが始まってプチフリしたんで、
オブジェクトは1回ずつ解放した方がいい
Set…Nothingをループの中に入れてもスピードはほとんど変わらんかった

288 :デフォルトの名無しさん:2012/12/26(水) 07:39:34.21
>>286-287
ありがとう!やっぱこんなもんなのか速度的には。
非同期ってのを頑張ってやってみようか・・・
プチフリは自分もたまにある。これが頻発すると下手すると40分してたんだよ(´Д`)ハァ…
オブジェクトの開放の仕方変えてみまつ。

289 :デフォルトの名無しさん:2012/12/26(水) 10:27:11.00
> HPからデータ持ってくる部分を
> 全部コメントアウトしても20分位かかるんで

なんでこんな嘘をつく必要があったんだ・・・

290 :デフォルトの名無しさん:2012/12/26(水) 15:30:44.84
例えば1日毎にA1からA15まで
16日目以降はB1からB15までといったように空欄に記入していたとします

このとき最後に記入した値を拾いたいのですがどのように書けばよいのでしょうか?

291 :デフォルトの名無しさん:2012/12/26(水) 15:45:06.45
最後に入力したセル情報ってどっかに保存されてたはず
だけど適当でいいなら、ワークシートチェンジだかなんだかでセルアドレス、内容をどっかに保存
それを読み出すのが楽

292 :デフォルトの名無しさん:2012/12/26(水) 16:24:07.14
>>290
For c = 1 To 2
For r = 1 To 15
If Cells(r, c) <> "" Then n = Cells(r, c)
Next
Next
Debug.Print n

293 :デフォルトの名無しさん:2012/12/29(土) 10:54:41.57
一番右の一番下でいいんじゃね
end2回

294 :デフォルトの名無しさん:2012/12/29(土) 11:04:52.98
VBA使いにはそんなマクロの記録みたいな不確定なコード組むやつがいるのな
欄外に注意書きとかあったらそっち拾ってくる可能性があるだろ
ほんと粗悪品だなお前

295 :デフォルトの名無しさん:2012/12/29(土) 11:14:42.89
そもそも一番下なのかどうかも不明だし

296 :デフォルトの名無しさん:2012/12/29(土) 11:38:54.56
最近、[>>294]とまったく同じことを言いたくなるようなコードを保守させられてる。
ユーザが1セル書き漏らしたり、隣にメモ書きしたりしただけで
正常に動作しなくなるツール群を修正中。

297 :デフォルトの名無しさん:2012/12/29(土) 13:05:45.28
>>296
基本的にダメ社員は保守作業をさせられるもんだよ
我慢して働いてればその内いいこともあるさ
頑張れ!

298 :デフォルトの名無しさん:2012/12/29(土) 13:33:55.66
なぜ296の文章のそこだけに噛み付いたか興味深い

299 :桃白白:2012/12/29(土) 13:40:27.55
桃白白にも仕事くれ

300 :デフォルトの名無しさん:2012/12/29(土) 22:07:37.84
性格に難のある方にはちょっと…

301 :デフォルトの名無しさん:2013/01/01(火) 11:34:22.80
セルを正方形にして
簡単なゲームを作りたいんだが
「キー入力」はどうコードで実現させますか?

302 :MADOKA MAGICA:2013/01/01(火) 12:27:58.91
MADOKA MAGICA

303 :デフォルトの名無しさん:2013/01/01(火) 13:00:36.72
>>301
リアルタイムキー入力のことなら
VBA自体にはその機能がない。
Windowsの機能を呼び出して使うことになるので
ここから先はスレ違いとなる。
「VBA キー入力」あたりのキーワードでググってみれ。

304 :デフォルトの名無しさん:2013/01/01(火) 17:39:51.82
http://www.uproda.net/down/uproda523165.zip.html

※「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

305 :デフォルトの名無しさん:2013/01/01(火) 17:58:17.47
単純な表なのだから、せめてxlsx形式で公開すべきだよなあ。
xls形式っていうだけで身構えてしまう。

306 :デフォルトの名無しさん:2013/01/01(火) 20:02:28.11
WINXP、Excel2007です。
ワークシート関数のCOUNTIFで配列を調べる事は出来ますか?  

Dim c As Variant

c = Range("A1:C10000")
cnt = WorksheetFunction.CountIf(Range(c(1, 1), c(3, 1000)), "1")

これはエラーになります。

307 :デフォルトの名無しさん:2013/01/01(火) 20:16:35.25
>>306
COUNTIFの引数はRange型っぽいからできないけど、何がしたいんだ?

エスパーしてみると

Dim c As Range
Set c = Range("A1:C10000")
cnt = WorksheetFunction.CountIf(c, "1")

こういうことか?

308 :デフォルトの名無しさん:2013/01/01(火) 20:26:44.73
>>306
COUNTIF(範囲,検索条件)
だから、引数1個多いんでないの

309 :デフォルトの名無しさん:2013/01/01(火) 21:00:42.55
CountIf(Range(略), "1")
だから引数は多くないだろ
ただ、なにがしたいかわからん

310 :デフォルトの名無しさん:2013/01/01(火) 21:19:23.13
とりあえず変数cを使わずに直接CountIfの中で
やりたい事記述したら?
それでエラーがでない且つ出力結果が望む形になるようになれば
変数に置き換えてもうまくいくはずだが

311 :306:2013/01/01(火) 21:24:09.89
大きなシートを調べたら、すごく時間がかかったので配列に入れました。

Setを付けたらエラー無く数えられました。

ただある範囲を調べたいので
cnt = WorksheetFunction.CountIf(Range(c(1, 1), c(3, 1000)), "1")

とかすると、エラーは出ないけど少なすぎる数字になります。
1は何千もあるはずなのに3とかになります。
範囲の指定のしかたがおかしいですか。

312 :デフォルトの名無しさん:2013/01/01(火) 21:27:33.47
>>310
cは変数ていうか配列の名前のつもりなんです。

313 :デフォルトの名無しさん:2013/01/01(火) 21:33:57.96
>>311
列と行の指定が変だから、皆突っ込んでいるのだと思うよ。
Range("A1:C10000") は3列10000行の範囲だけど、
その後の Range(c(1, 1), c(3, 1000)) は1000列3行の範囲になっている。

314 :デフォルトの名無しさん:2013/01/01(火) 21:38:02.25
A1:C1000は
↓↓↓ x1000

Cells(1,1):Cells(3,1000)は



x1000

こうだな

315 :デフォルトの名無しさん:2013/01/01(火) 21:41:51.90
>>313
え、そうなんですか
自分では1行1列目から3行1000列目のつもりでした。

316 :306:2013/01/01(火) 21:43:54.26
なんか全然間違ってたのかも
今まで作ったの全部見直さなきゃなんない。

317 :306:2013/01/01(火) 21:47:15.72
>>313
それで1が3個だった理由が分かりました
1行に1個あるから

318 :デフォルトの名無しさん:2013/01/01(火) 22:25:59.68
>>313
>Range(c(1, 1), c(3, 1000)) は1000列3行の範囲になっている
なってないぞ
c(1,1)の値(=A1セルの値)の行数とc(3,1000)の値(=どっかのセルの値)の列数だ
Range(Cells(1, 1), Cells(3, 1000))と勘違いしてないか?

319 :306: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個でよかったんです。
なんかすみませんでした。

320 :デフォルトの名無しさん:2013/01/01(火) 23:51:17.10
何はともあれ乙

321 :デフォルトの名無しさん:2013/01/02(水) 00:34:03.57
なぜ配列が a ではなく c なのか詳しく

322 :デフォルトの名無しさん:2013/01/02(水) 01:25:36.04
aを使ったら勝手にAに変換されたんでエクセルが使う文字だと思ったんです。

323 :デフォルトの名無しさん:2013/01/02(水) 01:57:18.12
配列って言ってもセル配列だからな
CellRange、CellArray、つまりcでも別におかしくはない

つーか配列はaって方が違和感あるな
プレフィックスとしてaを付加するってなら解らなくもないが
1文字で表現するなら「配列であること」より「何の」配列かの方が重要な要素なんだから
配列だからaってのは浅慮に過ぎる

324 :デフォルトの名無しさん:2013/01/02(水) 02:11:26.59
大文字になるのか。なんだろね。
確かにセルならcか。rangeだからrでもいいか。
どうでもいいけど一言余分な人ってリアルでも一言余分なのかな。詳しく。

325 :デフォルトの名無しさん:2013/01/02(水) 03:01:35.34
>>323
それ言うんならcじゃなくてcrかcaでしょ?
cだけじゃaより意味通んない。

326 :デフォルトの名無しさん:2013/01/02(水) 05:22:52.66
>>324
> どうでもいいけど一言余分な人ってリアルでも一言余分なのかな。詳しく。

リアルでもそうだよ。
人はなかなか変われないからね。

327 :リリン:2013/01/02(水) 06:42:12.25 ?PLT(45072)
なぜハンガリアン記法なのか詳しく

328 :デフォルトの名無しさん:2013/01/02(水) 08:24:07.01
ちょっとはググれ無能

329 :デフォルトの名無しさん:2013/01/02(水) 08:34:39.95
CollectionにRangeオブジェクトを詰めるとVariant()になってしまうんですが仕様でしょうか?
Rangeのまま処理したいのですがどうすればいいですか?

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()

330 :リリン:2013/01/02(水) 08:47:51.93 ?PLT(45072)
構造体じゃだめなの?

331 :デフォルトの名無しさん:2013/01/02(水) 08:51:57.36
仕様
Collectionは何でも突っ込めるようにするため型をVariantにして抽象化している

332 :デフォルトの名無しさん:2013/01/02(水) 13:40:51.82
>>331
Variant型ならキャストしてRangeとして扱えそうなんですが
ご丁寧にセルごとのValueが入ったVariant配列に分割されてしまってるみたいです
いろいろこねくり回したんですがRangeとして取り出せませんでした

>>330
構造体はちょっと大げさなので今回は動的配列にしようと思います


お手数おかけしました

333 :デフォルトの名無しさん:2013/01/02(水) 15:42:15.57
>>332
>ご丁寧にセルごとのValueが入ったVariant配列に分割されてしまってるみたいです
なにをしたいのか知らないが list.Add (rng) ならRange処理結果だから当然だろ
RangeのままCollectionに放り込みたいのなら list.Add rng

334 :デフォルトの名無しさん:2013/01/02(水) 15:52:56.10
>>331
違う
>>329,332
list.Add (rng) はlist.Add (rng.Value)として解釈されてる

コレクションに追加するなら
list.Add (rng.Cells)
取り出すときは
Set rng2 = list(1)

Range型は特殊な動きするから直接取り扱わん方がいいかもね

335 :334:2013/01/02(水) 16:02:01.44
ああ、追加は>>333で良いのか
つまり
Call list.Add(rng)
Call list.Add((rng))
との違いで下は(rng)が評価されてValueがセットされてる
(ホントはValueじゃなくてデフォルトプロパティだけど)

336 :デフォルトの名無しさん:2013/01/02(水) 16:14:21.31
VB.NETでデフォルトプロパティが非推奨とされた理由が良く解るな。
引数有りならともかく、無しの時の挙動がかなりキモい。

337 :デフォルトの名無しさん:2013/01/02(水) 23:05:10.68
デフォルトプロパティ頼みで記述を省略するコードはウゼエって思ってたんだよ

338 :デフォルトの名無しさん:2013/01/03(木) 00:03:45.20
省略して当たり前の物まで何もかも全部書いてあるのもウザいけどな

339 :桃白白:2013/01/03(木) 00:14:28.78
桃白白の意見も聞いちゃう? 桃白白はねWithブロックがウゼエって思う。
コピペしちゃったらいいじゃんって思う。インデント節約できるしコピっちゃいなよって思う。

340 :デフォルトの名無しさん:2013/01/03(木) 03:27:15.12
Withは使いどころによりけりでしょ
ひとつのオブジェクトに対して
複数のプロパティを操作するときには便利だと思うけど。

341 :デフォルトの名無しさん:2013/01/03(木) 06:30:45.61
>>339
Withは一階層インデントが深くなるデメリットと
可読性のメリットの天秤をかけて使用するものかと。

そもそもコピペで済まそうなんていうのは、コードとして良くないと思う。
コピペ自体間違っていることもあるわけで。
それとコピペ推奨なんてことになると、似たような関数作りまくりなんていう輩も出てくる。
こうなるとメンテナンスが大変面倒になる。

コードなんて書けば書くほどバグが出るものなんだから
コピーも含めて、できるだけ書かないようにするのがセオリー。

342 :桃白白:2013/01/03(木) 13:05:34.72
>>340>>341
(; ・`д・´) ですよね

343 :デフォルトの名無しさん:2013/01/03(木) 13:12:04.79
ちゃんとコーディングすれば可読性はあがる
VSだとIDEがしっかりしてるけど(しすぎて使いづらいのもあるが)VBAだと平打ちが面倒だったりする

344 :デフォルトの名無しさん:2013/01/03(木) 21:20:44.21
>>342
すぐ納得できることならはじめから調べてWithダメとか言わないように

345 :桃白白:2013/01/03(木) 22:36:03.73
>>344
それはすぐ離婚するんなら結婚なんかするなと言ってるようなものだ。
愛し合う二人は幸せを思い描いているときにその後のストーリーなんて
考えないわけ。それが若さでありラブストーリーを成り立たせる基本原則。
むかし、描かれないところは長い休みってことでいんじゃねという一つの
結論を出したドラマがあった。そうロングバケーションである。
山口智子が超かっこよかったのだけれど桃白白じつはそっくりなんだよね。
これ桃白白の横顔なんだけど超似てるっしょ。ほれたっしょ。

http://img64.pp.sohu.com/images/blog/2007/3/15/1/10/111e83e339c.jpg

桃白白はどうでもいいものを盗んで行きました。お前の心です。

346 :デフォルトの名無しさん:2013/01/04(金) 00:31:51.86
たおぱいの駄文結構好きだな

347 :デフォルトの名無しさん:2013/01/05(土) 19:37:06.26
なにもデータが入っていないのに無駄にスクロールバーが長いシートを綺麗にしたく、
Cells.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 罫線なし

348 :デフォルトの名無しさん:2013/01/05(土) 20:23:23.51
入力に伴う処理みたいに、作業中に行われる処理は遅くちゃこまるが
>>347みたいな処理は、他の作業の合間にバックグラウンドで実行させとくか
飯食ってる間や、会社なら会議中、自宅なら寝てる間とかに実行させとけばいいだけの話じゃん
むしろそれの処理を速くしようと試行錯誤する時間の方が無駄だと思うよ

349 :デフォルトの名無しさん:2013/01/05(土) 22:53:45.30
セーブして開き直したら短くなってると思うが

350 :デフォルトの名無しさん:2013/01/05(土) 23:03:40.43
>>347
セルの色は調べなくていいのか?

351 :デフォルトの名無しさん:2013/01/05(土) 23:05:19.08
>>347
遅いのは判定?削除?

削除は何度もやるんじゃなくて、削除すべき行を全部選択して一気にDeleteしてる?

352 :デフォルトの名無しさん:2013/01/05(土) 23:08:16.02
>>347
範囲でBordersを取得した場合に罫線の有無が混じっていると、
BorderオブジェクトのLineStyleがNullになるっぽいから、
それを利用して一行単位で判定すれば良いんじゃないか?
その時はIsNullで判定するように注意な。

353 :デフォルトの名無しさん:2013/01/06(日) 05:41:15.90
>>347
新規シートに有効なセルをコピペするんじゃダメなの?

354 :デフォルトの名無しさん:2013/01/06(日) 07:25:24.31
その「有効なセル」の判定に困ってるんだろ。

355 :デフォルトの名無しさん:2013/01/06(日) 07:47:39.21
>>354
判定して一行削除する処理が遅いって話なんじゃ?
値が入っている有効セルの判定なんてググればすぐ分かる。
http://www.happy2-island.com/excelsmile/smile03/capter00702.shtml

スクロールが長いのが嫌ということなら、こんな感じかな。
試してないから早くなるのか分からんが。

【準備】
列幅とか問題っていうのであれば、列幅だけ調整したシートを非表示で用意しておく

【実行】
1.【準備】で用意したシートをコピーする。
2.データが入っているシートの有効範囲をコピー
3.1.でコピーしたシートに2.の内容を貼り付け
4.場合によっては最終行の罫線を調整

356 :355:2013/01/06(日) 07:52:32.78
追加。

検査開始行が分かっていれば、値が入っている有効セルの行さえわかれば
一気に削除という方法もあるかも。

357 :デフォルトの名無しさん:2013/01/06(日) 08:39:25.13
>>355
>値が入っている有効セルの判定なんてググればすぐ分かる。

元のレス (>>347) をちゃんと読めば、「有効な最終セルを取得」は
既にやってることぐらいわかるでしょ。

Excel の「有効セル」と >>347 が言う「データが入っているセル」が
異なることぐらい理解しようよ。

358 :347:2013/01/06(日) 08:47:28.23
レスありがとうございます。

>>348
量が多いので隙間の時間では終わらないんです。

>>350
色は無視してOKです。

>>351
判定が遅いです。
削除は一行づつやっているので改善してみます。

359 :347:2013/01/06(日) 08:51:21.28
>>352
これは知りませんでした。
試してみます。

>>355
UsedRangeというものがありましたか。
UsedRangeとSpecialCells(xlLastCell)の間を削除対象とすれば良さそうですね。
UsedRangeがどういう判定するのか確認してみます。

360 :デフォルトの名無しさん:2013/01/06(日) 09:00:32.10
>>347
「ワークシートの最終行、最終列を取得する」でググってコード書いてみたけど
これじゃだめかな?(動作確認してないですw)

'Excelが認識している最後尾
maxExcelRow = Selection.SpecialCells(xlCellTypeLastCell).Row

'ユーザが認識している最後尾
maxUserRow = ActiveSheet.UsedRange.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row

'認識の差分を削除
.Range(maxUserRow + 1 & ":" & maxExcelRow).Delete

361 :デフォルトの名無しさん:2013/01/06(日) 12:29:41.13
まあ一行づつ削除してたら重くなるわな

362 :デフォルトの名無しさん:2013/01/06(日) 12:44:27.79
有効な最終セルを取得して、消したい行ってのはその最終行より上なのか下なのか
みんなの話は下って前提だけど、それなら何も考えずに全部消せばいいだけだろ
上なら画面表示とか再計算とか止めればかなり速度改善するぞ。すでにやってるかもしれんが
まあその場合は空行判定を簡素化して速度稼ぐぐらいか

363 :デフォルトの名無しさん:2013/01/06(日) 13:02:29.09
> それなら何も考えずに全部消せばいいだけだろ
単純に最終行までDeleteしただけだとスクロールバーは短くならなかった気がする

364 :デフォルトの名無しさん:2013/01/06(日) 14:26:59.79
Excel2010で確認してみたけど、
いちいち行削除とかしなくても、Ctrl+Sで上書き保存した瞬間にスクロールバーのスライダーの長さは元に戻ったぞ

再現の手順
(1) Excel起動
(2) A1にデータを入れ、名前を付けて保存
(3) A1000に飛んでデータを入力、Ctrl+S
(4) A1000を選択してDeleteキーを押してデータ消去
(5) A1に飛んでからCtrl+S → その瞬間にスライダーが長くなる

365 :デフォルトの名無しさん:2013/01/06(日) 15:33:30.81
エクセルの有効セルを書き換えちゃえばいいんだけども

366 :デフォルトの名無しさん:2013/01/06(日) 19:06:42.71
>>364
下側を削除するって前提だと
色は無視とか言ってるから、エクセル上で最終だと判断されるセルと
自分で設定したい最終行が違うんじゃね
セーブしろってのは>>349で出てるし

367 :デフォルトの名無しさん:2013/01/07(月) 00:31:13.44
>>366
そもそも >>347 に「データが入っていない = Valueが空 And 罫線なし」って
書いてあるんだから、Excel の最終セルの判断と違うのは自明だと思うが…

368 :デフォルトの名無しさん:2013/01/07(月) 14:58:50.54
複数行(行全体)を選択しているかどうかって、どうやって判別すればいいのかな?
ただし行はどこでも良い(連続した行を選択するが、連続しているかどうかはチェック不要)

例えば
4〜7行をまとめて選択している場合→複数行選択なのでOK

C4〜E7のセルを選択している場合→NG
C4だけ選択している場合→NG
C列を選択している場合→NG

369 :デフォルトの名無しさん:2013/01/07(月) 15:15:20.33
>>368
必ず連続してるんなら
Selection.Rows.Count >1
Selection.Columns.Count = Columns.Count
で判定できる
逆に、連続してないと判定が面倒になる

370 :デフォルトの名無しさん:2013/01/07(月) 16:09:11.37
>>369
おお、素晴らしい!

即レス有り難うございます

371 :デフォルトの名無しさん:2013/01/07(月) 19:22:18.66
For k = 1 To 5
i_" & k & "= x
こんな感じで変数の中に変数を使いたいのですがエラーになります
変数の中に変数は使えないのでしょうか?
それとも書き方が間違っているだけでしょうか?

372 :デフォルトの名無しさん:2013/01/07(月) 19:31:48.47
>>371
変数の中に変数なんて使えない。
どういうことをやろうとしてるのかな?

373 :デフォルトの名無しさん:2013/01/07(月) 19:54:32.13
>i_" & k & "= x
>i_" & k & "= x
>i_" & k & "= x
>i_" & k & "= x
>i_" & k & "= x

クソにも限度ってもんがあるだろ

374 :デフォルトの名無しさん:2013/01/07(月) 20:07:28.46
>>371
変数名に変数は使えない
配列を使いなさい

375 :デフォルトの名無しさん:2013/01/07(月) 20:09:43.82
i_1=x
i_2=x
i_3=x
i_4=x
i_5=x
ってしたいのか・・・

素直に配列使えw

376 :デフォルトの名無しさん:2013/01/07(月) 20:11:44.21
配列ですか・・・
難しそうですけど頑張って調べてみます

377 :デフォルトの名無しさん:2013/01/07(月) 20:35:55.75
Evaluate、Eval でやれば

378 :デフォルトの名無しさん:2013/01/08(火) 00:15:11.25
Evalの中で代入ってできたっけ

379 :デフォルトの名無しさん:2013/01/08(火) 10:43:40.50
そもそもVBAにEvalはないぞ
Application.EvaluateとかはVBAに対しては効かんのじゃないかな

380 :デフォルトの名無しさん:2013/01/08(火) 23:20:49.23
配列使うべし

糞コードにも程があるw

381 :デフォルトの名無しさん:2013/01/08(火) 23:28:21.07
変数に変数って使えなかったっけ
モジュールに変数は使えるんだがなあ

382 :桃白白:2013/01/09(水) 05:48:56.45
>>381
無理。完全に無理。シンボルとリテラルは違うものなんです。

383 :デフォルトの名無しさん:2013/01/09(水) 06:11:50.95
>>381
モジュールに変数って>>375のように
モジュール名_1
モジュール名_2
モジュール名_3
モジュール名_4
とかやってるの?

384 :デフォルトの名無しさん:2013/01/09(水) 13:37:15.08
モジュールっていうか……オブジェクトかな
右クリックメニューで呼び出すコード名を、変数つかって簡略化したり部品化したり

385 :デフォルトの名無しさん:2013/01/09(水) 16:32:49.47
>>381
つ 連想配列

どんなことがやりたいかは大体想像が付く
俺もVBA始めたばかりのころに、それと同じ事が出来ないものかと
悩んで調べて試行錯誤したから

でも連想配列使ったらあっさり解決した
オススメは組み込みのCollectionではなくScripting.Dictionary

386 :デフォルトの名無しさん:2013/01/10(木) 00:08:46.21
Dictionary最高。
こればっか使ってる。

387 :デフォルトの名無しさん:2013/01/10(木) 00:36:14.11
>>386
Dictionaryとは一言で言うとなんですかな?

388 :デフォルトの名無しさん:2013/01/10(木) 00:48:12.09
辞書

389 :デフォルトの名無しさん:2013/01/10(木) 09:22:25.38
質問です。
ユーザーフォームのテキストボックスに書き込んだ内容を
別のシートに書き込むというものを作っています。
12個のシートがあり、その中の1つに書き込みたいんですけど
テキストボックスに入力すると、12個すべてのシートに描かれてしまいます。
12個の中から1つを判別するにはどうすればいいでしょうか?
activesheetを用いてできますか?

390 :デフォルトの名無しさん:2013/01/10(木) 09:33:49.80
WorkSheets(シート名)
シート名は定数なりで定義しておく
ユーザーによるシート追加や名称変更があるんなら設定シートでも作ってそこにシート名を書くようにする

391 :デフォルトの名無しさん:2013/01/10(木) 09:52:02.49
>>390
ありがとうございます!できました!

392 :デフォルトの名無しさん:2013/01/11(金) 01:47:35.22
どなたか助けてください!

作りたいのは特定範囲に数値が入力されたら、その数値を比較して
小さい場合にメッセージを出す

A1からA10に5以下の数値が入力されたら小さいってメッセージを
A11からA15は10以下で
B1からB15は3以下の数値で同じように小さいってメッセージをvbaで作りたいです

いろいろあってvbaで作りたいです
入力規則だったかなんかのエラーメッセージではなくvbaで作りたいです

どなたよろしくお願いします

393 :デフォルトの名無しさん:2013/01/11(金) 02:21:28.32
イベント

394 :デフォルトの名無しさん:2013/01/11(金) 02:44:17.73
入力が完了したときのイベント

395 :デフォルトの名無しさん:2013/01/11(金) 03:22:35.65
セルの値が変更された時のイベント

396 :デフォルトの名無しさん:2013/01/11(金) 08:40:08.27
>>392
>>1の★5を声をだして読め。そして理解してから質問しろ。

397 :392:2013/01/11(金) 10:45:33.01
>>396 and ALL
どなたか助けてください!

作りたいのは特定範囲に数値が入力されたら、その数値を比較して
小さい場合にメッセージを出す

A1からA10に5以下の数値が入力されたら小さいってメッセージを
A11からA15は10以下で
B1からB15は3以下の数値で同じように小さいってメッセージをvbaで作りたいです

いろいろあってvbaで作りたいです
入力規則だったかなんかのエラーメッセージではなくvbaで作りたいです

どなたよろしくお願いします

398 :デフォルトの名無しさん:2013/01/11(金) 10:56:47.77
宿題丸投げスレって無くなったの?

399 :デフォルトの名無しさん:2013/01/11(金) 11:25:16.01
>>397
おそらく躓くのは入力(変更)されたセルが
特定の単一セルではなく、一定の範囲内にあるかどうかを判定する部分だろうが
「セルの値が5以下だったらメッセージを出す」程度は自分で書けるだろ?

そういうところを少しでも書いて来て努力と真剣さの色見えるなら、レベルが低くても協力してやる気になるが
自分では何もせずに丸投げして、運良く答えてくれる人が居たら

「2chのバカ共も偶には役に立つなw
 下手に出たフリして質問したらアッサリ釣られて無償労働(回答)してくれたよw」

と嘲笑うつもりなら、協力するつもりは一切無い。

以上。

400 :392:2013/01/11(金) 11:35:15.03
アホの>>399が釣れた(ワラ

401 :デフォルトの名無しさん:2013/01/11(金) 11:53:26.32
392には勿体無い説教

402 :デフォルトの名無しさん:2013/01/11(金) 11:57:20.33
これ>>400はさすがに392を貶める為の、他人のなりすまし煽りだろ
本人だとしたら、この悔し紛れの負け犬遠吠え後釣り宣言は恥ずかしすぎるw

403 :デフォルトの名無しさん:2013/01/11(金) 17:15:03.81
しょーがねーな

行はrowな
列はcolumn

cellsのrowとcolumnが一定範囲にあればいいんだから・・・
後はわかるな?

404 :デフォルトの名無しさん:2013/01/11(金) 19:34:03.47
RowとColumnではなくIn.....いやなんでもない

405 :デフォルトの名無しさん:2013/01/11(金) 19:40:51.02
あるフォルダにあるエクセルファイルを全部開いて
それぞれを配列のWorkbookオブジェクト変数にして
いろいろしたいんですが

どうすればいいですか?
とくに配列の( )の中の数字をいくつ数があるかわからないからどう宣言するかとか。

406 :デフォルトの名無しさん:2013/01/11(金) 19:51:09.91
>>405
配列変数ではなく連想配列使え

407 :デフォルトの名無しさん:2013/01/11(金) 19:52:36.43
動的に配列数を決めるにはRedim使え
1個ずつ増やしてRedimするコード書くと遅くなるって文句つける人がでるから注意な

408 :デフォルトの名無しさん:2013/01/11(金) 19:52:47.85
>>405
ReDimでググれ

409 :デフォルトの名無しさん:2013/01/11(金) 19:56:48.30
>>407
古来よりそう言い伝えられてるね

410 :デフォルトの名無しさん:2013/01/11(金) 20:00:27.63
>>406
VBAには残念ながら連想配列はないんだ
まあ普通はScripting.Dictionaryを使うんだが、あくまでこれは外部機能
あとコレクション使う方法もあるけど、これもイマイチ

411 :デフォルトの名無しさん:2013/01/11(金) 20:12:02.95
言語って基本的に外部機能使ってなんぼなんだが
まだそれを理解するレベルに達してないのか?

まあVBはもちろん、VBAは更に組み込みの機能が多すぎだからな
初心者かつVBAしか使えない奴は、内部機能だけで事足りちゃうのかもね

412 :デフォルトの名無しさん:2013/01/11(金) 20:19:23.05
>>411
> 言語って基本的に外部機能使ってなんぼなんだが

初耳だな。
基本なんて言葉を迂闊に使うと恥をかくぞ?
お前の中だけの基本は基本とは言わないからな。

413 :デフォルトの名無しさん:2013/01/11(金) 20:38:56.81
釣られちゃだめだ釣られちゃだめだ釣られちゃだめだ

414 :桃白白:2013/01/11(金) 20:40:10.95
>>412
お前の耳にはかまぼこでもつまってんのか?
javaも.netもvbaもライブラリ使ってなんぼのもんだろ。

>>392
教えてやんよ桃白白のインターセクションというやつをな。
ほい、これどうぞ。
https://friendpaste.com/3DWujWgX971XCJpTHA1aqC

415 :405:2013/01/11(金) 20:45:13.48
つべこべいわずに
コードを示してくれないか?
それすらできないと
みんな初心者と変わらないぞ

416 :デフォルトの名無しさん:2013/01/11(金) 20:48:45.04
標準のライブラリを外部って言っちゃう脳

417 :桃白白:2013/01/11(金) 20:49:54.74
>>415
桃白白は信心深そうに思われてるかもしれないけれどもじつは無心論者なんだよね。
イエスが神の子だと信じてもいないし、輪廻転生もないと思ってる。前世が見える
といっちゃうやつは完全に頭がいっちゃってると思う。みんな人生の初心者だってこと。

418 :デフォルトの名無しさん:2013/01/11(金) 20:56:41.43
>>415
みんな初心者だよ。
熟練者は2ちゃんなんてやっている暇はない。

419 :デフォルトの名無しさん:2013/01/11(金) 22:42:53.58
>>414
ありがとうございます。
そういうやり方があったんですね。
実際は指定範囲が可変になっていて
ChangeイベントでIntersect&ifだと、行を新たに追加した際に
型が違いますと出てしまって困ってたんですよ。

420 :桃白白:2013/01/11(金) 22:49:14.04
>>419
え、なになに、どういうこと?桃白白はそのIntersectのほうに興味があるわ。

421 :デフォルトの名無しさん:2013/01/12(土) 02:23:36.52
replaceって何か参照設定する必要ある?
LeftやRightは使えるんだけど、replaceが動かん。補完もされん。
↓な使い方してます。

buff = replace(stmInPutTextFile.ReadAll, "ab", "zz")

エラー:引数の数が一致しません。または不正なプロパティを指定しています。

422 :デフォルトの名無しさん:2013/01/12(土) 02:26:18.74
Nullなんじゃね

423 :デフォルトの名無しさん:2013/01/12(土) 02:35:38.05
補完とか、何の言語をどんな開発環境で使ってるのか知らんが
stmInPutTextFile.ReadAllやらがどうなってるのかまず調べろや

424 :デフォルトの名無しさん:2013/01/12(土) 02:43:23.04
>>423
口臭そうだから人と会話する時はガムを噛めや

425 :デフォルトの名無しさん:2013/01/12(土) 02:46:12.55
すまん。
VBE使ってちまちま書いてます。

stmInPutTextFileはOpenTextFileで開いたテキストストリームで
テキストファイルの中身は↓こうなってる。
--ここから--
abcdefg
hijklmn
--ここまで--
stmInPutTextFile.ReadAllをmsgboxで確認してみたけど、読めてはいるみたい。
一気にテキストファイルを読みこんで、必要な部分を置換して書き出すっていうのがやりたいんだけど、
いろんなところのサンプルは「Replace」だけで成り立っているのに
あたいのは動かないんだよね…

426 :デフォルトの名無しさん:2013/01/12(土) 03:14:05.93
ReplaceがおかしいならReplaceに絞れよ
InPutTextってなんだよおちょくってんのか

MsgBox Replace( "ShineGomi", "Gomi", "Kasu" )

こういうのを試した結果を示せよアホ

427 :デフォルトの名無しさん:2013/01/12(土) 03:19:08.12


428 :デフォルトの名無しさん:2013/01/12(土) 03:26:52.00
教えてもらう分際で申し訳ないんだけどさ、
それができないからここで聞いてるんだけど。
なんでそんなに威圧的になってるかわからない。

結果は一緒だよ
引数の数が一致しません。または不正なプロパティを指定しています。

これだけでなんかわかんのか?

429 :デフォルトの名無しさん:2013/01/12(土) 03:47:30.48
>これだけでなんかわかんのか?





>これだけでなんかわかんのか?

430 :デフォルトの名無しさん:2013/01/12(土) 03:52:05.82
だからまず環境を詳しく書けよ
普通は動くものが動かないんだ。お前の環境がいちばん怪しいんだよ

431 :デフォルトの名無しさん:2013/01/12(土) 03:52:06.17
まんこ

432 :デフォルトの名無しさん:2013/01/12(土) 03:56:15.52
>>424
おまえウンコ臭い
パンツは毎日履き替えろや

433 :デフォルトの名無しさん:2013/01/12(土) 03:57:10.95
それで動かないのは、予約後をどっかでうっかり使ってるとかじゃないか?
そのブックはとりあえず閉じて、新規ブックでReplace関数が動くか試してみろや

434 :デフォルトの名無しさん:2013/01/12(土) 04:37:52.63
buff = replace(stmInPutTextFile.ReadAll, "ab", "zz")

buffが範囲を選択してそうな予感
Replaceって範囲セルを指して置換と単一セルを指して置換じゃ記述変わるぞ?

435 :デフォルトの名無しさん:2013/01/12(土) 09:10:02.81
>>428
ここはお前のサポセンじゃねぇよ
お前こそクレーマー気質だな
お店に行って店員じゃないそこらのお客に質問して返答に怒ってる感じ

436 :桃白白:2013/01/12(土) 09:13:20.41
>>435
ここは俺の日記帳。お前は出てけ。

437 :デフォルトの名無しさん:2013/01/12(土) 10:16:39.52
はい喧嘩はやめて

喧嘩はやめてぇ〜♪
二人をとめてぇ〜♪


誰の歌だったっけ?キャリーパムパム?

438 :デフォルトの名無しさん:2013/01/12(土) 18:36:56.76
>>434
ちょっと何言ってるかわからんが、>>426が同じ結果だっていってるんだから
Range.Replaceの話ではないぞ

>>428
Replace選択してShift-F2でオブジェクトブラウザ立ち上げろ
そこに、なんのメンバだと書いてある?

439 :デフォルトの名無しさん:2013/01/12(土) 19:02:36.67
みんな、ヒントありがとう

>>433
ありがとう。別ブックでやったら動いた。
何が原因かわからないんだけど、自分で設定した予約語ってどうやったら確認できるの?
replaceの頭をRで入れてもrに戻されるんだよね。

>>434
Range.とかCell.で試してみたけど一緒な結果だった。
今はテキストファイルの取り扱いでやっててエクセルのシートは使ってない。

>>438
VBA.Strings のメンバー
って書いてある。
ヘルプ出してみたらReplace関数って出た。

>>437
竹内まりやだろ

440 :デフォルトの名無しさん:2013/01/12(土) 19:44:16.05
エクセルファイルは肥大化するから何かあれば新規ブックに引越しする必要があるよ

441 :デフォルトの名無しさん:2013/01/12(土) 19:48:20.34
>>439
予約語云々より一等地の名称は関数名に使うなってことでしょ。
repelaceという名称をつけたいなら何をreplaceする関数なのかという意味を持たせて
replace○○とかにすれば、今回のような予約語を使ってしまったり、
関数名を重複するような問題はぐっと減ると思う。

442 :デフォルトの名無しさん:2013/01/13(日) 00:07:07.27
>>440
プログラム探すのもめんどくさくなってくるしね。
まぁ、肥大化っつっても俺のブックは100k行ってないけど…

>>441
うん。いい勉強になったよ。
名前の付け方には気を付ける。
横着するとよくないな。

443 :デフォルトの名無しさん:2013/01/13(日) 00:53:46.56
VBA で 100K行とか…、スゲーとしか思えない。
いろんな意味で。

444 :デフォルトの名無しさん:2013/01/13(日) 01:21:07.80
>>439
Option Explicitでエラーが出なくなるまで必死に修正しろ

445 :デフォルトの名無しさん:2013/01/13(日) 03:20:18.51
>>443
"100K行" じゃなくて"(ファイルサイズが)100K いってない" でしょ

と、マジレスしてみる

446 :デフォルトの名無しさん:2013/01/13(日) 11:04:06.20
マジで「100k行」しか見てなかった orz

100k 「行ってない」 のな。

447 :デフォルトの名無しさん:2013/01/13(日) 13:53:00.67
まあ、10行でも行ってないと言えば行ってないのは確かだが
VBAのソースだけで100Kあったらそれはそれでスゲーぞ

448 :デフォルトの名無しさん:2013/01/13(日) 14:52:53.74
100KB なら、一行平均 20バイトとして 5,000行だから、
まあスゲーと言うほどでもないかと。

449 :デフォルトの名無しさん:2013/01/13(日) 15:06:38.60
セルの値が他ファイルにあるか調べるには、どの方法がいい?
もちろんあったらそのファイルから関連データも一緒に取り出す。

(1) Find使う
(2) WorksheetFunction.Vlookup使う
(3) その他 (詳しく)

(1)はよく変な動きをするし
(2)はひっかからないときエラーが出て困る
「など」の不具合がある。

450 :デフォルトの名無しさん:2013/01/13(日) 15:17:58.19
ファイル?
fsoだか使えばいいのでは

451 :デフォルトの名無しさん:2013/01/13(日) 15:25:24.32
>>449
エラーが出て困るんならエラートラップすればいいだけ
Errプロパティで分岐

452 :デフォルトの名無しさん:2013/01/13(日) 15:57:26.70
>>449
不具合あるのは君のコードかと・・・
その不具合のあるコードを晒してみたら誰かが改善してくれるよ

453 :デフォルトの名無しさん:2013/01/13(日) 18:20:57.83
>>449
俺だったらFind使うけど、変な動きってのがどんなのか分からない
もっと詳しく教えて

454 :449:2013/01/13(日) 18:51:19.07
またまた。
エラーや不具合や変な動きというのは
みんなエスパーしてくれよ。
VBA上級者ならそんなの簡単に推測できるだろ?
教えてとか晒してとか、単にニヤニヤしたいだけだろ?

fsoは調べてみたけど高級そうなのでとりあえず踏み込まないことにした。
やっぱりFindを使うことにしてFindの使用方法を極めたほうがいいのかな?

455 :デフォルトの名無しさん:2013/01/13(日) 18:56:13.04
極めるっていうか、基本的な使い方を覚えればいいんじゃね?
まだそこまで達してないようだから

456 :449:2013/01/13(日) 19:00:11.21
>>455
Findはかなりクセのあるメソッドなるは知っとるけ?
Ctrl+Fと同じ機能だけど、Ctrl+F押したときのWindowの設定がデフォになることとか。

457 :デフォルトの名無しさん:2013/01/13(日) 19:16:54.34
なにそれこわい

458 :453:2013/01/13(日) 19:35:22.49
>>456
いや、それは仕様としてちゃんとヘルプにも書いてあるから
「変な動き」でも「不具合」でもないよ

459 :デフォルトの名無しさん:2013/01/13(日) 20:30:11.94
当たり前のことを当たり前にできるまでは時間がかかるもの。頑張って

460 :デフォルトの名無しさん:2013/01/13(日) 20:31:39.94
>>211
亀ですがカラーリングとソート無事できました
本当に助かりました
ありがとうございました

461 :デフォルトの名無しさん:2013/01/13(日) 23:15:42.41
このスレ言い争いが続いてるから、問題を出しましょう。
一番スッキリと的確に答えられた人を勝者とします。

【問】 あるブックに複数シートがあり、全セルを対象としてセルの値をすべて別ブックの1つのシートの1列目に書き出しなさい。
同一のセルの値がある場合は、当然1つだけを書き出します。
意味がわからなければ「エスパー」してください。

462 :デフォルトの名無しさん:2013/01/13(日) 23:40:26.64
だからfind使えよ
問題ですじゃねえよカス
頭下げて教えを乞えないゴミはしね

463 :デフォルトの名無しさん:2013/01/13(日) 23:50:28.39
>>461
こんな上から目線のレスの問いに答える必要なし、というエスパーの結果となりました。

464 :デフォルトの名無しさん:2013/01/13(日) 23:54:41.30
俺は未来から来たエスパーだがこんなことしてる場合じゃないぞお前ら

465 :デフォルトの名無しさん:2013/01/14(月) 05:50:56.43
>>461
文章問題の設問ってのは実は難しいだぜ
それこそプログラミングと同じ位難しい

意味が分かりやすいのはもちろんのこと、例外が発生しないように
あるいは例外時にどうするかまで事細かに考えなければならない
1つだけは例外への条件を提示しているが全然足らず、それを漏れなく提示できないレベルの頭なら
「質問」はいいが、「出題w」なんて出来るレベルには無いので
余計荒れる原因になる不適切な出題など投下しないで大人しくしてろ

466 :デフォルトの名無しさん:2013/01/14(月) 06:27:10.87
>>461
問題とはぜんぜん関係ないんだけどさ。
問題文は
Aがあり、Bしろ。っていう形じゃん。
「あり」は「ある」の連用形。「しろ」は「する」の命令形。
動詞の連用形があとの動詞の形に順応するとするなら
Aがあれ。Bしろ。ということになっちゃわない?

467 :デフォルトの名無しさん:2013/01/14(月) 11:02:23.79
>>461 ヴァカ?

468 :デフォルトの名無しさん:2013/01/14(月) 11:03:45.88
素直に教えてくださいっていえよ

469 :デフォルトの名無しさん:2013/01/14(月) 15:03:47.16
>>461
こんなカキコしてるから雪降っちまったじゃねぇか!

470 :デフォルトの名無しさん:2013/01/14(月) 15:32:29.89
関東民乙

471 :デフォルトの名無しさん:2013/01/14(月) 16:26:25.28
地方民乙

472 :デフォルトの名無しさん:2013/01/14(月) 16:43:24.72
いいえ、私の住まいはパナマです

473 :デフォルトの名無しさん:2013/01/14(月) 17:07:47.82
南極も雪です

474 :デフォルトの名無しさん:2013/01/14(月) 21:05:11.37
ブックをオープンして、、そこにあるシートを順繰りに見ていく処理考えてんですけど、

For i = 1 To Worksheets.Count

Next
矢印の部分で順番にシートをアクティブにするにはどうしたらいいんでしょ?

475 :474:2013/01/14(月) 21:09:50.85
For i = 1 To Worksheets.Count
  Worksheets(i).Activate
  MsgBox i & "番目のシート"
Next
End Sub

でしたね^^;

476 :デフォルトの名無しさん:2013/01/14(月) 22:49:49.70
>>474
Step -1

477 :デフォルトの名無しさん:2013/01/15(火) 02:30:46.70
仕事でチーム内で共有状態でみんなで使ってるExcelファイルがあり
ある条件のセルには色を塗るというルールを決めてみんなで勝手に編集してるのですが
ここで問題。

標準の色の「赤」や「黄」はみんなそこから選ぶから問題はないんだけど
「ピンク」や「水色」はみんな色が微妙に違ってるのを選んでてバラバラ。
これをVBAで統一の「ピンク」や「水色」にしてください。

478 :デフォルトの名無しさん:2013/01/15(火) 03:22:09.90
Sub aaa()
  Dim 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

479 :桃白白:2013/01/15(火) 07:09:19.46
>>477
https://friendpaste.com/1HYrR4QsPTj7VwpJG5egNc

480 :hope2013:2013/01/15(火) 09:17:41.89
ExcelのWorkSheet上にボタンを置いて、自分に対するADOをOpenします。
このADOをOpenして閉じるだけで、このBookを閉じても、VBAProjectが残ってしまいます。
何か回避策はありますでしょうか?よろしくお願いします。

481 :デフォルトの名無しさん:2013/01/15(火) 09:25:45.37
vbaのintegerって2byteだったのか

482 :477:2013/01/15(火) 10:45:39.52
>>478
コードみると動きそうだけど
どのセルの色もさっぱり色は変わりませんわ。

483 :デフォルトの名無しさん:2013/01/15(火) 10:49:28.17
あるセル範囲を選択してる状態でそのマクロを走らせると
同一の値があるかどうか調べて
(1) もしなければ「問題ないよ」、あれば「値の重複セルがあるよ」とMsgBoxで表示するコードはどうなりますでしょうか?

さらにすすんで
(2) 値の重複セルがあった場合、そのすべてをシンプルに「"ABC"が重複 (アドレスA1, B2, B4)、<改行>"うんこ"が重複(アドレスA5, B1)」
みたいな感じでMsgBoxで表示するコードはどうなりますでしょうか?

(1)を基本に考えてるけど、
(2)がシンプルなコードで書けてしかもバグの全くない完璧な動きをするなら(2)を採用します。

484 :デフォルトの名無しさん:2013/01/15(火) 11:54:45.61
>>483
丸投げかよ

485 :483:2013/01/15(火) 12:12:39.52
そういうつもりではないのですが…

486 :デフォルトの名無しさん:2013/01/15(火) 12:23:21.23
ちゃんと読めよ
丸投げじゃねえだろ

使えないなら採用しないってんだからもう少しひどいw

487 :デフォルトの名無しさん:2013/01/15(火) 14:13:10.25
そもそも想定してるピンク、水色ってRGBでいうといくつだよ
幅がありすぎてプログラムできんわ

488 :デフォルトの名無しさん:2013/01/15(火) 14:21:45.25
>>487
それは変だわ。
RGBの値を変更するだけでいいように作ればいいだけじゃんw
本筋のコードは関係ないだろ。

489 :デフォルトの名無しさん:2013/01/15(火) 14:37:54.09
Sub aaa()
  Set 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

490 :477:2013/01/15(火) 14:46:47.81
>>487
このへんを使ってると思われます。
http://2ch-dc.mine.nu/v4/src/1358228733818.jpg

491 :デフォルトの名無しさん:2013/01/15(火) 15:01:41.25
哲学論hqプログラミングには向いてないですぅ
リスト作って、ピンクとか赤とかのセルを系統振り分ければいいじゃん
コード側で読み出せ

492 :デフォルトの名無しさん:2013/01/15(火) 16:50:14.50
とりあえず近い色かどうか判断する関数を作って、水色とピンクと2回ずつ呼ぶ
これなら想定する色がなんでも対応できる

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

493 :デフォルトの名無しさん:2013/01/15(火) 20:40:48.54
色相の範囲で判断するのが正解だとおもうが

494 :デフォルトの名無しさん:2013/01/16(水) 15:51:12.13
ここまで労力使うんだったら、運用で済ませたほうが楽でしょうに。

495 :デフォルトの名無しさん:2013/01/16(水) 15:56:32.94
運用とは?

496 :494:2013/01/16(水) 17:35:06.75
>>495
色付けのルールをチームの中で決めて運用していくのがいいのかなと。

と、思ったけど、>>477をよく見ると条件付き書式で対応できるんじゃねえの?
と思うようになった。
わざわざVBAで書くほどのことじゃないでしょ。

もっと楽しようぜ。

497 :デフォルトの名無しさん:2013/01/16(水) 17:39:28.07
今後はそれでいいとして
今までに入力したのを何とかしたいって話なんじゃ

498 :デフォルトの名無しさん:2013/01/16(水) 17:55:48.73
>>497
今までに入力したやつは書式のコピーで事足りるんじゃね?

499 :デフォルトの名無しさん:2013/01/16(水) 21:15:44.38
いくら色が混在してるからって
パターン上にあるやつじゃないの?
自作カラーなんてないんじゃね?

500 :デフォルトの名無しさん:2013/01/16(水) 21:37:11.60
>>498
色付きセルがランダムに何千個もあったりしたらと思うとぞっとする

501 :デフォルトの名無しさん:2013/01/16(水) 21:40:42.02
>>499
>>490の画像の中でピンクに見える色はいくつある?
たぶん見る人によってかなりの幅があるぞ
モニターが変わると色の見え方も変わるし、色付きシートの現物を見ないことには
どこまで対応すればいいのか想像も付かん

502 :498:2013/01/16(水) 22:22:23.02
>>500
そういう考え方もあるけど、グループみんなで扱ってるブックなら
ランダムってことは稀だと思うけど。

>>477を見る限り、ある条件で色を付けてるってことだから、バラバラの色は気にしなくて
ある条件の時のセルの色を決定すればいいと思うけどね。
今後、条件付き書式を使うんであれば、ある条件の時に条件付き書式を設定する
ようにしてあげれば統一が取れると思う。

503 :デフォルトの名無しさん:2013/01/17(木) 00:44:30.26
まんこをいじると気持ちいい

504 :デフォルトの名無しさん:2013/01/17(木) 01:12:37.49
>>501
せいぜい20だろ
そんなのエイヤと条件分岐でいいじゃん

505 :デフォルトの名無しさん:2013/01/17(木) 06:57:38.38
色でなく名前とかIDとかを加えて条件付き書式で
って色の自由選択とかどんな中学生集団だよ

506 :デフォルトの名無しさん:2013/01/17(木) 07:17:38.85
>>505
色固定にしちゃったらさ、別の色にしたい時にまたコード書かなくちゃいけないでしょ。
もっと楽に作ろうと思わないのかな?
条件付き書式程度にとどめておけば、使いたい色に変更できるし、コードを変更する必要がない。

コード書くというのは新たなバグを生む。
最初から、できるだけコードは書かないような作りにしておけば、後が楽になるし、
空いた時間はまた別な新たなことができるだろ。

507 :デフォルトの名無しさん:2013/01/17(木) 07:42:50.69
>>506
ごめん

色でなく名前とかIDとかを加えて条件付き書式で(やれよ。)
って(いうか)色の自由選択とかどんな中学生集団だよ

508 :デフォルトの名無しさん:2013/01/18(金) 20:09:55.89
「変数の型宣言」(Integer, Long, Doule, Stringみたいなやつ)と
「NumberFormatLocal」("0_ "とか"m/d/yyyy"とか"@"とかね)は
お互いに密接な関係があるの?

こういうのをお手のものに使いこなすために
知っておくべきことをまとめていただけますか?

509 :デフォルトの名無しさん:2013/01/18(金) 20:43:33.79
前半:
 関係ないよ

後半:
 俺様が勉強しやすいように、資料や情報をおまえらが無償であつめてまとめろ
 なんて傲慢な内容を表面だけ丁寧に言っても、誰がその内容に従うかよw

 自分から努力することを放棄して、都合の良い資料を出せなんて我が儘言ってないで
 まずは自ら努力していろいろ調べて、それでも解らないところがあったら具体的に聞け

以上

510 :508:2013/01/18(金) 21:26:27.39
俺様が勉強しやすいように、資料や情報をおまえらが無償であつめてまとめろ
まあこの質問はVBAの達人でそれに熟知してないと答えられないだろうから
中途半端に知ってる人が偉そうに答えてほしくはないけどね。

511 :デフォルトの名無しさん:2013/01/18(金) 21:40:04.32
>>508
「こういうの」ってどういう意味?
質問が曖昧すぎて答えられない。

512 :デフォルトの名無しさん:2013/01/18(金) 21:42:05.13
> 知っておくべき
じゃなくて
やってみてどうなるかを覚えるほうが

513 :デフォルトの名無しさん:2013/01/18(金) 21:42:45.82
>>508
知っておくべきこと→Is系のチェック関数としてまとまってるだろ

514 :デフォルトの名無しさん:2013/01/18(金) 22:00:34.19
必要になったらその時点で調べて勉強する
でいい。

受験勉強じゃあるまいに

515 :デフォルトの名無しさん:2013/01/18(金) 22:40:31.88
Is系のチェック関数とは?

516 :デフォルトの名無しさん:2013/01/19(土) 06:24:00.42
>>515
いい加減ググレカス!

517 :デフォルトの名無しさん:2013/01/19(土) 06:33:48.88
ちゃんと答えられない人は(→まあこれは大部分の人だうけど)、単に>>508様の質問のことが頭に整理されてないだけじゃん。
別にそれはそれでぜんぜん恥ずべきことじゃない。
むしろそれを頭に完全に整理できてる人なんて100万人に1人くらいかもしれないし。

だから答えられない人はだまってていただいてぜんぜんOKなのに。
なぜ偉そうに説教しようとするかな。

518 :デフォルトの名無しさん:2013/01/19(土) 06:55:17.73
たった1行の質問に対して回答が何百行、何千行になるとかザラだからだよ
答えがわかっててもどこから手を付けていいのかわからなくなってパニックになる

初心者の質問に対して怒る人は、まあ好意的に解釈すれば完璧主義者だな
「こんな大変な事を気軽に聞くんじゃねぇよ」みたいな

519 :デフォルトの名無しさん:2013/01/19(土) 07:12:10.93
>>518
たしかにそうだね。
初心者の質問に対して怒る人は完璧主義者かもしれない。
別にその人に回答を要求してないのに要求された気になってて
しかもその回答は完ぺきであるべきて論理的な矛盾は1%も含まれてはいけないみたいな。

でも回答できる人はまとめサイトを紹介するとか
自分でまとめたものをコピペするだけでいいのに。

520 :デフォルトの名無しさん:2013/01/19(土) 07:33:10.69
>>519
要するに「ググれ」だろ

521 :デフォルトの名無しさん:2013/01/19(土) 13:21:35.54
you tubeで「新唐人テレビ」を検索して見てください。
新唐人テレビは中国の民主化を望む中国人自身によるテレビ局で、海外に拠点をおき、
中国共産党の圧力に屈する情けない日本のマスゴミよりもよっぽどまともなテレビ局です。

日本では中国共産党の圧力により報道出来ないニュースが沢山取り上げられています。
新唐人テレビのような勇気ある報道機関を広める事で、中共の圧力に屈し、
真実を伝えない日本のマスゴミのへなちょこぶりを浮き彫りにする事にもなります。

新唐人テレビを日本や在日中国人の間に広めて、
中共が日本に戦争をしかけてくる前に中共を内部崩壊させましょう!

522 :デフォルトの名無しさん:2013/01/19(土) 16:54:06.32
クレクレ君がいっちょ前に反抗してるよw

523 :デフォルトの名無しさん:2013/01/19(土) 18:57:35.03
>>519
人に言う前にお前が紹介してやれよw

524 :デフォルトの名無しさん:2013/01/21(月) 20:53:19.90
次の方、どうぞ

525 :デフォルトの名無しさん:2013/01/22(火) 12:26:15.46
次の方いきます。

フィルターしたシートに
他シートのSelectした部分のデータを
「うまく」コピペするためのコードを教えていただけませんか?

コピー先だけがフィルターされてて、コピー元はフィルターされてません。
「うまく」とは表示されてるセルにちゃんと記入されるということです。

526 :デフォルトの名無しさん:2013/01/22(火) 13:21:30.66
>>525
Forで回してセルが非表示かどうか調べながら一セルずつコピーしてくしかないと思う

527 :デフォルトの名無しさん:2013/01/22(火) 14:39:06.27
>>525はマルチなので、以後放置で

528 :デフォルトの名無しさん:2013/01/22(火) 14:43:11.83
次の方、どうぞ

529 :デフォルトの名無しさん:2013/01/22(火) 15:02:15.21
次の方いきましょう。

A列はセルに重複データも含まれています。
B列もセルに重複データも含まれています。
しかしA列のセルとB列のセルの文字列を連結した値は、すべての行でユニークです。
この「A列のセルとB列のセルの文字列」でAdvancedFilter機能を使いたいんですが
コードはどうすればいいか教えていただけませんか?

AdvancedFilter機能で使うフィルター用データは別シートでSelectされているものとします。

530 :529:2013/01/22(火) 15:05:33.41
【例】

(A列) (B列)
チーム 守備
巨人 投手
巨人 捕手
巨人 左翼
巨人 中堅
巨人 右翼
阪神 投手
阪神 捕手
阪神 左翼
阪神 中堅
阪神 右翼
中日 投手
中日 捕手
中日 左翼
中日 中堅
中日 右翼


<フィルタ用>
チーム 守備
巨人 捕手
中日 投手
阪神 捕手

531 :デフォルトの名無しさん:2013/01/22(火) 15:44:24.08
C列に連結した値入れておけば良いだけだろ
見えると邪魔なら非表示にしてもいいし
C列は他の用途で使ってるならDでもEでもZでもIVでもXFDでもいいし

後出しで作業列使うのはやだとか言うなよ
使わずにも出来るけど、使ったところで弊害無いし面倒だから

532 :デフォルトの名無しさん:2013/01/22(火) 15:59:16.10
criteriarangeにセル範囲指定
セル範囲にかわるデータセット渡せないのかな

あるいはc列不可視に連結出力

フィルター使わなくていいなら、データをバックアップして結合して該当抜き出し

533 :529:2013/01/22(火) 16:07:09.40
作業列使うのはやだ

534 :529:2013/01/22(火) 16:08:07.12
元データは、みんなで共有で使ってるから、勝手にいじれないんですよ。

535 :デフォルトの名無しさん:2013/01/22(火) 16:18:27.94
新しいウインドウに出力するのは?
自分のファイルで開いて、元データだけ取得して加工するのは?

536 :デフォルトの名無しさん:2013/01/22(火) 16:57:24.53
・シート追加
・結合データ出力
・フィルタリング
・結果取得
・シート削除

537 :デフォルトの名無しさん:2013/01/22(火) 18:33:11.17
>>529
何が問題なのかさっぱりわからん。
AdvancedFilter機能使いたいんならググればいいじゃん。
サンプルコードならすく検索できるだろ。

そのサンプルコードを参考に作ってみて分からなければここで質問してもいいと思うけど。

538 :デフォルトの名無しさん:2013/01/23(水) 01:24:21.52
ちんこいじると気持ちいい

539 :デフォルトの名無しさん:2013/01/23(水) 07:04:43.51
ちんこじゃなくってティンコだな(´・ω・`)b

540 :デフォルトの名無しさん:2013/01/23(水) 14:16:02.09
質問です。超初心者で申し訳ないのですが。
for文のカウンタ変数は、for文をプロシージャの中で複数使う場合
宣言は一回でよろしいのでしょうか?iという変数を宣言しておけば、違う
for文でも普通に一緒のが使えますよね?
こういうのはよくないのでしょうか?

541 :桃白白:2013/01/23(水) 14:27:29.94
>>540
下は良くないけど上は良い。
桃白白なら同じの使っちゃう。だって別の変数を宣言するのめんどうなんだもん。
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

542 :デフォルトの名無しさん:2013/01/23(水) 14:31:52.18
Next だけで動くっけ
Next i じゃないと動かないんじゃないっけ
Step って省略しちゃうのか
Step って明示したくない?

543 :デフォルトの名無しさん:2013/01/23(水) 14:33:43.73
>>540
言語仕様的には何の問題もないけど
ヒューマンエラーを招きやすいって意味では避けた方がいいね

まあ使い捨てコードや、こういうところでの回答としてサンプルコード晒す場合とかなら別にいいが、
長く使うつもりなら、そもそもForを1回しか廻さなくても、そしてiに限らず1文字変数を使うのは避けるべき
カウンタにi,j,k,lってのは、変数の文字数が多くなると弊害が出る時代に生まれた慣習であり
今となっては悪習でしかないからね

544 :桃白白:2013/01/23(水) 14:40:10.44
>>542
Nextだけで動くよ。
桃白白はStepを省略しちゃう。だってStepを書くのめんどうなんだもん。

545 :540:2013/01/23(水) 14:44:54.88
>>541 >>543
どうもありがとうございます。
明確にはあまり決まっていないのですね。参考にします。

>>桃白白
市況2にいるタオパイパイっていうコテハン思い出しました。

546 :デフォルトの名無しさん:2013/01/23(水) 14:58:51.42
ループのカウンタ変数に一文字変数を使うと、ネストなしのループなら問題ないけど、
複数ネストしたループに一文字変数を使った場合、カウンタ変数がどこのループ
のカウントをしているのかわからなくなってバグを引き起こしやすい。

ループのカウンタ変数を状況によって一文字や単語?に使い分けていたりするのも有りだと思うけど
一文字変数を使ってはいけない状況で使ってしまいそうで怖い。
なので、どんな時でも一文字変数は使わないようにしておくとバグを起こしにくくなる。

547 :デフォルトの名無しさん:2013/01/23(水) 15:00:39.88
つまり、FORTRANはバグだらけっと

548 :デフォルトの名無しさん:2013/01/23(水) 15:03:31.21
>>542
個人的にはNextだけだとネストしたときに読みにくいから
必ずカウンタ変数もつけてる
そのほうがデバッグしやすい

Stepのほうは Step 1 なら省略する
でも、たまにそこが可変の処理
(たとえば時系列で並んだデータを、1秒ずつ処理するか、1分ずつ処理するか、みたいな時)
にはStepで指定することも有る

549 :桃白白:2013/01/23(水) 15:06:34.78
>>543
桃白白それにはちょっと断固反対の立場だわ。グローバル変数でってことなら
わからないでもないけど、ローカル変数にまでその考えを適用しちゃったら
こういうことになっちゃうよ?バブルソートのロジックさえ複雑に見えない?

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

550 :デフォルトの名無しさん:2013/01/23(水) 15:11:38.94
んなもんモノによるだろ
逆もまたしかり

551 :デフォルトの名無しさん:2013/01/23(水) 15:17:59.30
>>549
バカ正直に単語を並べればいいってものじゃないでしょ。
outerLoopIndexなんてouterIdxでも通じるし。

「outer」っていうのが肝だから省略するのは考えるところだけど、
「LoopIndex」なんていうのはカウンタ変数であることが解ればそんなに長く書く必要はない。

552 :桃白白:2013/01/23(水) 15:21:51.82
>>551
うんだから、桃白白は1文字の変数使っちゃったらロジックを
明快に示すことができるよって立場なの。

553 :デフォルトの名無しさん:2013/01/23(水) 15:25:11.69
桃白白ってまだそのレベルなのか

554 :デフォルトの名無しさん:2013/01/23(水) 15:29:39.45
cntOut、cntInnとかだわ

555 :デフォルトの名無しさん:2013/01/23(水) 15:31:26.43
>>548
VBSなら Next'Cnt とかやる
Stepは変数使ったり-1とかであったりなかったりってのが嫌だから
Stepは書くわ

556 :デフォルトの名無しさん:2013/01/23(水) 15:32:25.41
>>549
> 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

こういうのはその時は本人が理解できているからいいのかもしれないけど、
時間が経つと何やってるんだっけ?と本人も理解できないようなコードに化ける。

557 :デフォルトの名無しさん:2013/01/23(水) 15:35:56.34
for row = 1 to 10
 for col = 1 to 20
 next
next
みたいに、簡潔で意味のある変数名選択しろってことだよ。

558 :デフォルトの名無しさん:2013/01/23(水) 15:41:37.50
>>557
同意。
特にExcelでセルの位置を舐めるときは、そういう変数名がいいね。

559 :桃白白:2013/01/23(水) 15:42:35.41
>>556
ああまあね、うん。

560 :桃白白:2013/01/23(水) 15:44:24.78
>>557
じゃあxとyでもいいわけじゃん。
簡潔で座標の意味を表すことができるわけだからさ。

561 :デフォルトの名無しさん:2013/01/23(水) 15:51:43.09
>>552
一文字変数でロジックを明快に示すことは難しいと思うけど。
あまりにもコードがスッキリすぎて何をどうしたいのか理解するのに苦労する。

他人に物を伝えるときに一文字発すれば伝わるか?
最低限何かしら単語を発さないと伝わらないと思うが。

562 :デフォルトの名無しさん:2013/01/23(水) 15:54:35.90
>>560
Excelの場合、行列という概念があるんだが。

563 :デフォルトの名無しさん:2013/01/23(水) 15:56:40.04
>>560
座標って言っても、x,yだけじゃ何の座標か解らんな
例えばマウスカーソルの座標だったらcurX,curYとかな


>>562
シート上でも座標概念はあるぞ
x,yではなくTop,Leftだが

564 :桃白白:2013/01/23(水) 15:58:49.52
>>561
他人にものを伝えるときに一文字しかしゃべらない人はそれはもう頭がおかしい人じゃん。
桃白白は頭がおかしい人じゃないからそんなことしない。いまも一生懸命文章書いてるよ。
何をするのかは関数名で示すなり、ここではバブルソートが行われるんでんがなみたいな
コメント書いとけばいいじゃん。>>549を見てよ。どう見たって下のほうがわかりやすいっしょ。

565 :桃白白:2013/01/23(水) 15:59:45.36
>>563
Cells(y, x)でわかるっしょ。そんなのわかるっしょ。わかるっしょ。

566 :デフォルトの名無しさん:2013/01/23(水) 16:03:29.55
BASICのforのカウンタ変数は
外側からi,j,k,l.m...とするよう昔から相場が決まっている。
逆にカウンタ変数以外にこれらを使うことはない。
一文字で十分伝わる。

567 :デフォルトの名無しさん:2013/01/23(水) 16:31:18.77
コーディング規約如何だろ
くだらん事で盛り上がってんなや
プログラミング一年生かお前ら

568 :557:2013/01/23(水) 16:41:11.38
>>565
hoge(○, △)と表記するとき、まぁほとんどの人がxとyを選択するだろうなぁ的な文脈だったら
xとyがいいよ。

でも、cells(y, x)はあまり一般的じゃ無い気がするけど。

569 :557:2013/01/23(水) 16:42:34.54
>>567
一周回ると、名前超重要ということに気づく。

570 :桃白白:2013/01/23(水) 16:44:43.40
>>568
はい。

571 :デフォルトの名無しさん:2013/01/23(水) 16:54:09.13
>>569
はい。
(規約如何である事に同意の上ならば)

572 :デフォルトの名無しさん:2013/01/23(水) 16:54:49.21
そもそも、xyを変数に使わない
エクセルだもん
rowとcolmun だろ

573 :デフォルトの名無しさん:2013/01/23(水) 16:57:48.93
あーそもそも論を出しちゃうのー??

↑この「そもそも論」って使う?もしくは使う人が身近にいる?

574 :デフォルトの名無しさん:2013/01/23(水) 16:58:27.44
そもそもExcel VBAでコーディング規約??みたいな

575 :デフォルトの名無しさん:2013/01/23(水) 16:59:50.24
20年以上前から様々な言語で同じ様な議論がされ常に結論は出ない→くだらん事ってことでしょ
正直自分もこの話題にはうんざり

576 :デフォルトの名無しさん:2013/01/23(水) 17:00:23.46
Cells (x,y)だと
座標y,xになる

で、Cells (y,x)って記述するのは違和感がある
慣れてないものつかってヒューマンエラー起こすくらいなもんだし

直感で理解出来るコードって大事よ

577 :桃白白:2013/01/23(水) 17:06:29.77
>>576
Cellsの1番目の引数が縦を表すことに変わりはないんだから
その違和感をものにしなきゃいけないと思うの。Cellsはたしか
違和感のある記述をしなきゃいけないんだったって記憶しちゃったらいいじゃん。いいじゃん。いいじゃん。

578 :デフォルトの名無しさん:2013/01/23(水) 17:08:00.56
>>575
BBSでうんざりってなにを寝言言ってんだ

579 :デフォルトの名無しさん:2013/01/23(水) 17:23:24.65
>>577
ExcelでRow、Columnと使っているのに何で態々x、yとExcelと異なった表記をしたくなるのか?
Row、Columnなら殆どの人がどこを操作しているのか明快だと思うけど。
名称がRow、Columnとなっているのに、x、yと名前と付けたがる方が違和感がある。

Top、Leftもそのような名称がExcelで使われているんであればそれを使ったほうが自然。

580 :桃白白:2013/01/23(水) 17:31:53.07
>>579
Row, ColumnはRangeオブジェクトを参照するときに使うっしょ。
y, xはインデックスをあらわすときに使うっしょ。だから。
LeftはVBAの文字列操作関数とかぶるから使えないっしょ。

581 :デフォルトの名無しさん:2013/01/23(水) 17:37:30.22
なんでこのスレって俺より解ってる奴が一人も居ないんだろう?
リアルだと俺より上なんてゴロゴロ居るのに、、、、、

582 :デフォルトの名無しさん:2013/01/23(水) 18:03:16.24
>>581
いるけど
くだらないことにはレスしないんだよ
上級者というのはそういうものだ

583 :デフォルトの名無しさん:2013/01/23(水) 18:15:25.75
>>581
まあ俺の方がお前より上だね

584 :デフォルトの名無しさん:2013/01/23(水) 18:42:46.57
やはり居ないみたいだな

585 :デフォルトの名無しさん:2013/01/23(水) 19:06:39.34
おもいっくそCells(y, x)とか言ってるやつが何を

自分で使うならいい
人に自慢するならいい

人が使ってる手法を否定すんな
グラマとして最低限の作法だろ、それ

どうでもいいことかも知れないけど、言われてるほうからすればお前の主張こそ「どうでもいい」
いや、パイパンのことだけじゃないんだけど

586 :桃白白:2013/01/23(水) 19:27:59.36
>>585
いいたいことはわかるけど、それやると女子のお茶会みたくならない?
えーそれかわいーと言い合うだけになっちゃわない?桃白白は別にいんだけどさそれでも。
桃白白はじっさいかわいいからさ。

587 :デフォルトの名無しさん:2013/01/23(水) 19:29:28.13
>>585
お前も人のこと否定してるし、お前の主張もどうでもいいw

588 :デフォルトの名無しさん:2013/01/23(水) 19:31:30.85
>>585
お前の主張が何なのかイマイチ良くわからんが
>人が使ってる手法を否定すんな
まっとうな批判ってのが世の中にはあるんですが
批判されるのがいやなら一般公開されるような掲示板に書き込みしちゃだめだよ

589 :デフォルトの名無しさん:2013/01/23(水) 19:35:22.78
うむ。
ネット掲示板で議論するのなら
人格を始めとする様々な自己属性を
攻撃・否定されるのも当然覚悟のはずだろう。
主張はするけど否定されたくはないというのは
このうえない自己中。

590 :デフォルトの名無しさん:2013/01/23(水) 19:37:20.86
>>586
それだけはないわー

591 :デフォルトの名無しさん:2013/01/23(水) 19:57:07.19
久しぶりにのびてると思ったら・・・
ここは質問スレ。議論スレじゃない。否定・主張・批判、まったくもって関係ない。
プログラミング法について議論したいならそういうスレに逝け。
命名規則・コーディング規約はプロジェクトや個人で選択するもん。批判・否定レベルの話じゃない。
プログラミング法を否定しちゃいけない。これはプログラマなら魂の奥底から理解できること。
スレ違いです。

次の質問者どうぞ。

592 :デフォルトの名無しさん:2013/01/23(水) 20:11:11.05
>>591
バグの出やすいコードと思われるものに対して何も言わないのも問題だと思うけどね。
というよりコードって人に見せて批判されて書き直して、を繰り返していかないと
いいコードになっていかないものだけど。

魂の奥底なんてコードを書くのに関係ないから。

593 :デフォルトの名無しさん:2013/01/23(水) 20:13:19.07
年寄りから言わせてもらえば、英単語を省略する方がよっぽどバグの温床になるぞよ
IndexをIdxと書くとか
とくに開発の規模が大きくなると、どの単語をどう略するかのルール作りで余計な手間が増えるし
コーディング時のミスも増える

それで問題ないと言ってる人は結局はマイルールを作っちゃってるという意味で1文字変数と大差ない
一人で完成させるプロジェクトなら好きにすればええ

594 :デフォルトの名無しさん:2013/01/23(水) 20:45:12.04
>>593
グローバルな変数しか使えなかった時代の人ですか?

595 :デフォルトの名無しさん:2013/01/23(水) 20:55:31.46
>>593
コーディング規約全否定かよw

596 :デフォルトの名無しさん:2013/01/23(水) 22:23:48.62
IndexやObjectぐらいなら全員知ってるからいいけど、
辞書を引かないとわからないような単語を略されるとデバッグ担当が死ぬ
そういう経験が無いとか想像できない奴はまだまだ経験値不足だな

597 :デフォルトの名無しさん:2013/01/23(水) 22:29:26.79
Aさんの作ったモジュールAではColor IndexををColIdxと略した
Bさんの作ったモジュールBではColumn IndexをColIdxと略した

これでバグが出ない方がおかしい
グローバルじゃないからこそ、こういうことが起きるわけで

598 :デフォルトの名無しさん:2013/01/23(水) 22:32:29.65
>>596
一文字変数も同じレベルだが何か?

599 :デフォルトの名無しさん:2013/01/23(水) 22:33:19.51
>>596
見渡せないほどでかいスコープに変数公開してるからでしょ?
宣言と使用箇所が近ければそんな風に変数がどんな役割か見失ったりしないよ?
スコープに応じて変数名の長さ変えるとか今は常識だよ?
プログラミング向いてないんじゃない?

600 :デフォルトの名無しさん:2013/01/23(水) 22:35:57.23
>>597
大きいプロジェクトなのにレビューしないのかよw
そういう省略はレビューで思いっきりNGになるんだが。

601 :デフォルトの名無しさん:2013/01/23(水) 22:37:47.49
1回限りのカウンタにiを使うなんてどんな参考書にも書いてあるだろ
この程度の常識を知らないやつはコード書く資格なし

602 :デフォルトの名無しさん:2013/01/23(水) 22:41:16.73
>>600
理想論だな
規約をきちんと作ればいい、レビューすればいい、それで解決できれば誰も苦労しない
そういう事務的な作業を増やさない工夫のが重要

603 :デフォルトの名無しさん:2013/01/23(水) 22:42:56.83
(普段回答に参加できないからって、こういう時ばっかり張り切って揚げ足とるんだよなお前らって・・・








まあここまで俺の自演だけどな)

604 :デフォルトの名無しさん:2013/01/23(水) 22:48:07.45
ルールっては増えれば増えるほど逆に質が落ちるんだぜ
故意でも過失でもルールを破る奴が増える、そのチェックにコストがかかる
無理にでも質を維持すると生産性が落ちる
迫る納期、辞めてく同僚
コーディング能力と人間性は比例しない
どんだけ金を積んでも理想の人材なんか決して集まらない、そもそも金なんか積めない
それでも作らなきゃいけない
さあどうする

結論、マ板へ行け

605 :デフォルトの名無しさん:2013/01/23(水) 22:55:58.17
省略否定派は最低でもLocal_Variable_Integer_Temporary_Counter_Level001って書いてるんだろうな?

606 :デフォルトの名無しさん:2013/01/23(水) 22:57:15.06


607 :デフォルトの名無しさん:2013/01/23(水) 23:01:08.74
悔しいからって極論厨に成り下がると、後から自分で見てもっと惨めでもっと悔しくなるよ

608 :デフォルトの名無しさん:2013/01/23(水) 23:01:42.89
>>602
逆でしょ。
規約、レビューなしのほうが理想論。

609 :デフォルトの名無しさん:2013/01/23(水) 23:05:12.83
>>605
省略否定派はいないと思うが。
一文字変数じゃ省略しすぎと言ってるだけ。
極論過ぎんだよ。

610 :デフォルトの名無しさん:2013/01/23(水) 23:05:36.58
圧倒的      論破・・・っ!!

611 :デフォルトの名無しさん:2013/01/24(木) 01:31:25.89
>>609
お前も極論すぎないか?なんでもかんでも1文字にしろとはいってないだろ
(VB以前のBASICにはそういう高速化テクニックもあったんだが)
重要でないループインデックスのi,j,kぐらいは、BASICの常識として通用するんじゃね

612 :デフォルトの名無しさん:2013/01/24(木) 01:59:51.73
お前らもまんこにちんこ突っ込んでみなよ
気持ちいいぞ

613 :デフォルトの名無しさん:2013/01/24(木) 08:48:25.69
>>611
その考えがバグにつながると言っているのだが。
コードを書けば書くほどバグが出るからといって、省略しすぎるのも問題。
BASICでは常識なのかもしれないけど、今じゃ悪習だし、そもそもBASICとVBAって全く違う。

マシン語ならコンピュータが理解できればいいから別に気にしない。
VBAが優れているかどうかの話は別にして、仮にも高級言語なんだから
人間が理解できるように書こうという姿勢が見られないんだよね。

614 :桃白白:2013/01/24(木) 09:54:51.62
>>613
じゃあ何か実装してみてよ。
桃白白のバブルソートよりわかりやすいバブルソートが書ける?
重要ではないループの変数名を長くして何かわかりやすくなる?
お前が言っているのは机上の空論どころか騎乗の空論だよ。お馬さんに
乗ってパカパカやってるだけだよ。

615 :デフォルトの名無しさん:2013/01/24(木) 09:58:15.27
>>613
すでに599でも言及されているけど、
変数のスコープが十分に狭ければ一文字変数であってもぜんぜん問題ない
そして611は変数名を全部一文字にすることを提唱しているわけでもない。
結局のところ変数名というものは短くて良いものもきちんとしたほうが良いものも
両方あるわけでその線引きはバランスの問題としか言いようが無い。

616 :デフォルトの名無しさん:2013/01/24(木) 10:20:39.55
まぁアレだ

次の方どうぞ w

617 :デフォルトの名無しさん:2013/01/24(木) 10:32:06.24
>>591
久しぶりにしか見ないんなら、またしばらく来るなよ。

618 :デフォルトの名無しさん:2013/01/24(木) 11:13:25.52
ぬるぽ

619 :デフォルトの名無しさん:2013/01/24(木) 11:14:11.74
日本語文を理解できないやつが多すぎてこまる
早とちり程度なら可愛げもあるが……
脳内で悪印象を付与して再構築、妄想レスが多すぎる
お前らの反応コード組んだプログラマ読んでこい、どうせメリケンなんだろ

620 :デフォルトの名無しさん:2013/01/24(木) 12:55:53.21
> お前らの反応コード組んだプログラマ読んでこい、どうせメリケンなんだろ

マジで理解できない

621 :デフォルトの名無しさん:2013/01/24(木) 13:03:46.43
>>620
同意
こんな文章しか書けない>>619
「日本語文が理解できないやつ」とか言われたくない

622 :デフォルトの名無しさん:2013/01/24(木) 13:19:32.10
文脈が読めない人工無能ってことだろ

コードって言ってるんだから、それより下位の人工恥能を意味してるんだろうなあ

623 :デフォルトの名無しさん:2013/01/24(木) 13:31:45.28
>>622
おまえもか・・・
君と>>619
自分の文章力について少し反省したほうが良いぞ
まずは新聞を毎日きちんと読むとか、
そういう習慣をつける事から始めてみなよ

624 :デフォルトの名無しさん:2013/01/24(木) 13:41:04.25
俺は内容を支持するつもりは無いが、言ってる意味はわかるぞ
真に受ければ不快な内容だが、そこそこ上手いこと言ってるし

というか>>619に「うっせぇ、氏ね」とか悪態つくならまだしも
理解できないとか意味不明とか言っちゃうと、
自分のリテラシーの無さを暴露してるだけになっちゃう気がする

とか書くと俺が>>619本人の自演扱いにされそうだなw

625 :デフォルトの名無しさん:2013/01/24(木) 13:48:54.43
読解力をリテラシーと言いたがる奴の存在について

626 :エスパー君登場:2013/01/24(木) 13:54:17.21
> お前らの反応コード組んだプログラマ読んでこい、どうせメリケンなんだろ

補完: お前らのレスはできの悪い人工無能レベルだ)

お前らの反応コード→そのお前らのレスを自動生成する人工無能のアルゴリズム
組んだ奴→を書いた奴
読んでこい→呼んでこい
どうせメリケンなんだろ→どうせ日本人じゃ無いんだろ(だから程度低いレスなんだ)

627 :デフォルトの名無しさん:2013/01/24(木) 13:56:43.85
何で句読点打たないのかしら。
何かの流行なの?

628 :デフォルトの名無しさん:2013/01/24(木) 14:03:53.83
つかさ、たいした質問なんか出ないんだから、おいしそうな話題で盛り上がったっていいじゃない

629 :デフォルトの名無しさん:2013/01/24(木) 14:04:40.58
>>624
ああいう(>>619>>622のような)不完全な日本語を理解できたり
(もっとも、理解出来ると思っているだけなのかもしれない)
エスパーしたりすることが日本語の読解力だと思っているなら
それは大きな間違いだよ

630 :桃白白:2013/01/24(木) 14:06:54.77
>>627
桃白白最近気づいたんだけどさ、漫画って句読点がないんだよね。
ワンピースやナルト、比較的文字数が多い名探偵コナンも句読点がない。
そうなるとさ、句読点ていらないんじゃね。

VBAでも変数はDimで宣言されてなくても使えちゃったりするじゃん。
むしろロジックと関係ないという意味でDimもAsも飾りみたいなものじゃん。
なくてもいいじゃん。

631 :デフォルトの名無しさん:2013/01/24(木) 14:12:01.88
悔しさ爆発してる奴が居て笑えるw

632 :デフォルトの名無しさん:2013/01/24(木) 14:18:28.94
>>630
Option Explicitくらい付けろ。
バグの元だ。

633 :デフォルトの名無しさん:2013/01/24(木) 14:23:11.14
>>630
いや、宣言は強制しといたほうが良いだろ
他人の組んだコードのメンテ作業をすると、
変数を宣言せずに使ってて、変数名間違ってて別の変数扱いになってるとか
そういうバグは何度か見た経験があるよ

あと、変数の型指定もそれ自体が変数の意図を表してたりするから
出来れば適切な型指定を心がけたほうが見やすいコードになると思う。

634 :桃白白:2013/01/24(木) 14:26:33.24
>>632, >>633
(; ・`д・´) ですよね

635 :デフォルトの名無しさん:2013/01/24(木) 14:37:16.77
何かパイパンを更生させるスレになりつつあるなw

636 :デフォルトの名無しさん:2013/01/24(木) 15:13:46.86
くっだらない言い争いが続いていますが、気にしなくて結構なんで、次の方どうぞ

637 :デフォルトの名無しさん:2013/01/24(木) 15:22:08.54
くだらないということにしたいのは、何故なんだろう
スレ違いという自分の指摘を無視されたのが気に入らないのか

638 :初心者:2013/01/24(木) 15:28:22.57
質問です。
VBAにinputbox関数が二つありますよね?あれって厳密にどう違うんでしょうか?
inputboxメソッドといわれるものはアプリケーションオブジェクト(エクセルというオブジェクト)
の関数(メソット)ですよね。じゃーもう一つのinputbox関数そしてその他の
msgboxや、range関数はなんのメソッドなのでしょうか?何か上のオブジェクト
はあるんでしょうか?なんか見当違いの質問だったらすいません。

639 :デフォルトの名無しさん:2013/01/24(木) 15:29:37.47
>>637
ここのスレタイも読めない白痴か、お前は

640 :デフォルトの名無しさん:2013/01/24(木) 15:38:10.93
最近の質問者ってパイパン臭がする。
違うのかもしれないけどw

641 :デフォルトの名無しさん:2013/01/24(木) 16:10:55.00
たあにはこういう和気藹々したのも悪くないわな

642 :デフォルトの名無しさん:2013/01/24(木) 16:25:50.91
>>639
スレ違いか否かと、くだらないか否かは別問題だよ
なのに、なんでくだらないということにしたいの?

643 :デフォルトの名無しさん:2013/01/24(木) 16:45:50.74
そして質問には総スルー
流石だな

644 :デフォルトの名無しさん:2013/01/24(木) 16:53:15.89
>>643
じゃあお前が答えてやれよ

645 :デフォルトの名無しさん:2013/01/24(木) 16:54:37.48
>>638
ググレカス!

646 :デフォルトの名無しさん:2013/01/24(木) 17:04:38.10
>>638
そんな長い文章書く前に、どうしてググらないのかなぁ。
「VBA input 関数 メソッド」で、一番上のリンクに答えがあるのに。

647 :デフォルトの名無しさん:2013/01/24(木) 17:13:53.32
VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/

なんてのもあるけど、半年で171レスしかないよね
分ける必要なんかやっぱなかったね
スレ違い原理主義者が分けたんだっけか

648 :デフォルトの名無しさん:2013/01/24(木) 17:17:11.16
>>646
それは638への適切な答えではないと思う。
あそこに書いてあるのは使い方の違いであって
そもそも関数とメソッドの違いってなんだ?という質問への答えではない

649 :デフォルトの名無しさん:2013/01/24(木) 17:20:09.88
>>638
Application.InputBoxメソッド
Applicationのメソッド、つまりエクセルの組み込み機能

InputBox関数
VBAに組み込みの関数

MsgBox
VBAに組み込みの関数

Range
Rangeは関数じゃない。エクセル組み込みの「何か」のメソッド
何かを指定しない場合はActiveSheetだと思っといてよい(本当は違うけど)

650 :デフォルトの名無しさん:2013/01/24(木) 17:26:53.09
関数とメソッドとプロパティがわかりづらいよな

651 :デフォルトの名無しさん:2013/01/24(木) 17:38:42.41
>>648
そもそもの質問は関数とメソッドの違いについてではない
まあ質問者がその違いを把握してるとは思えないが

広義な関数は、0個以上の引数を与えて1個または0個の値を返すのが関数
そういう意味ではメソッドも関数
狭義な関数はVBAで定義された関数でいいんじゃないかな
>>649ではそういう意味でRangeは関数ではないと言ってる

もとの質問はInputBoxは2種類あるけど、どこで定義されててどう違うんだ?
MsgBoxやRangeはどこで定義されてるんだ?って質問
InputBoxが関数かメソッドかは大した違いではない

652 :デフォルトの名無しさん:2013/01/24(木) 17:43:02.29
プロパティも広義の意味じゃ関数と言えるし

653 :デフォルトの名無しさん:2013/01/24(木) 17:50:55.89
>>652
プロパティは変数のほうがしっくりくるけど。

654 :648:2013/01/24(木) 17:51:19.95
>>651
いやあのね、646が言ってるリンク先って
多分OfficeTANAKAのここなんだけど

http://officetanaka.net/excel/vba/tips/tips37.htm

ここではInputBoxについてメソッドと関数の二つを紹介してるの
おそらく638も存在自体は分かってて
その根源的違いについて聞いてる質問だと思ったんだよね。

655 :デフォルトの名無しさん:2013/01/24(木) 17:52:34.70
VBや.NET系のプロパティは代入できるからなぁ
あれは関数というより変数じゃないだろうか

656 :デフォルトの名無しさん:2013/01/24(木) 17:54:44.31
>>648
なんかウザイわ、お前

657 :デフォルトの名無しさん:2013/01/24(木) 17:55:22.53
>>653
Rangeプロパティは変数なのか?

658 :デフォルトの名無しさん:2013/01/24(木) 17:59:24.79
>>654
その根本的な違いがメソッドか関数かだと思ってるならお前も解ってない
メソッドも広い意味では関数だからな
エクセルに組み込みの関数(メソッド)なのか、VBAに組み込みの関数なのかの差

VBAはエクセル専用の言語ではないって前提をまず理解しないと

659 :デフォルトの名無しさん:2013/01/24(木) 18:01:11.72
つか、こっちの話の方がどうでもいいわ
くだらん

660 :648:2013/01/24(木) 18:05:48.32
>>658
分かってないから俺は答えられなかったんだよ

661 :デフォルトの名無しさん:2013/01/24(木) 18:18:55.21
>>657
これを見る限り変数に見えるけど。
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.range_properties(v=office.11).aspx

662 :デフォルトの名無しさん:2013/01/24(木) 18:26:44.67
>>657
Range型の変数相当だと思っていいんじゃね

まあ、プロパティは、
 値をセットするメソッド(setter)
 値を取得するメソッド(getter)
 値を保存するフィールド
の三位一体だからな
ただ、プロパティにするかメソッドにするか考えたときに
値(状態)を保存するものはメソッドよりプロパティがふさわしいという原則を考えると
プロパティは変数のようなもの、と考えるのが妥当かと

663 :デフォルトの名無しさん:2013/01/24(木) 18:30:53.73
>>661
> 単一のセルまたはセル範囲を表す Range オブジェクトを取得するには、Range(arg) プロパティを使用します。
> 引数 arg には範囲の名前を指定します。

変数って引数を与えるのか?

664 :662:2013/01/24(木) 18:31:10.55
>>657
ってふと思ったんだが
Rangeプロパティってどっかにあるか?

あったとしたら、RangeメソッドかRange型の間違いじゃないか

665 :662:2013/01/24(木) 18:49:06.31
>>663
確かにプロパティになってるな(この辺は大昔にすったもんだあった気がしたが)

Range(arg)はRange._Default(arg)の省略
変数が直接引数をとってるわけではない。デフォルトプロパティが引数をとってるだけ

Dim r As Range
Set r = Range("A1:D4")
MsgBox r(1, 1).Value

ちゃんと動くだろ。でもrが引数をとってるわけじゃない

666 :初心者:2013/01/24(木) 19:39:52.32
遅レススマソ
>>654
正解です。グーグルである程度調べました。
しかし中地半端にオブジェクト指向型言語ををしっている僕としては
その明確にどのように動作しているか?仕組みというものが気になったんで
す。
>>649
あ、なるほど。
・・・つまり、applicationメソッドということはそのエクセルのソフトに
依存して、エクセルソフトの機能も使って実現してるということですね?
VBAの組み込みはVBの派生みたいな感じで?あくまでVB側の関数を派生
したということで。(簡単にいうと)ですよね?

>>651
どうもありがとうございます。
そういう質問ですね。
よく僕の質問は意図しない答えが返ってこない場合が多々ありますが。
(現実にも)

667 :デフォルトの名無しさん:2013/01/24(木) 19:47:09.39
>>666
とりあえずオブジェクトブラウザの使い方を覚えろ
F2で立ち上がる
それで調べれば何のメンバかはすぐわかる

668 :初心者:2013/01/24(木) 19:52:28.91
>>667
ほんとだ。こんなところに色々でてるんですね。
調べてみます。
ありがとうございます。

669 :デフォルトの名無しさん:2013/01/24(木) 21:54:58.12
OS Windows7
Excel 2007 です。
http://hamachan4.exblog.jp/6405335/
このサイトを参考にユーザーフォームに動画を張り付けたのですが
再生されません。再生ボタンをクリックしても再生されませんでした。
ローカルウィンドウで動画のURLは指定されているのを確認しています。
何か対策はありますか?

670 :デフォルトの名無しさん:2013/01/24(木) 21:59:24.23
Private Sub MovSearch() '動画ファイルの検索
Dim 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

671 :デフォルトの名無しさん:2013/01/24(木) 21:59:54.79
Private Function fncmovFileSearch(ByVal p_Folder As Folder, ByVal p_SubFolder As Boolean) As Boolean
Dim 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

672 :デフォルトの名無しさん:2013/01/24(木) 22:00:29.01
Private Sub CommandButton2_Click() '動画ボタンClick
Call MovSearch
UserForm3.WindowsMediaPlayer1.URL = Mov(0)
UserForm3.WindowsMediaPlayer1.Height = 290
UserForm3.WindowsMediaPlayer1.Width = 330
UserForm3.Show (0 - vbModeless)
End Sub

長いですがコードの一部です。

673 :デフォルトの名無しさん:2013/01/24(木) 22:01:57.69
ユーザーフォームではなく普通のWindowsMediaPlayerで再生できることは確認したの?
後入れしたMPCとかGOMとかRealPlayerではなく、Win標準のWindowsMediaPlayerで

674 :デフォルトの名無しさん:2013/01/24(木) 22:04:56.16
>>673
確認しています。
元々Windousに入ってたSumple動画で試しました。

675 :デフォルトの名無しさん:2013/01/24(木) 22:11:44.73
こういう書き込みがあると元の質問がネタかと思ってしまう…

676 :669:2013/01/24(木) 22:17:47.79
誤字だらけですみません
>元々Windowsに入ってたサンプルムービーで試しました。
が正解です。

677 :デフォルトの名無しさん:2013/01/24(木) 23:03:51.61
そもそもその動画ファイルはMediaPlayerで再生できるのか?

とりあえず動作しないミニマムコード作ってから質問してくれ

678 :桃白白:2013/01/24(木) 23:05:25.55
>>676
すくなくとも提示されたコードではMovの0番目にURLがセットされないっすよ。

679 :デフォルトの名無しさん:2013/01/24(木) 23:16:02.16
なんか動かんと思ったらみんなグローバル変数かよ…

まさかと思うけど、URLセットしたあとちゃんと「再生」してる?
Call UserForm3.WindowsMediaPlayer1.Controls.Play

680 :669:2013/01/24(木) 23:16:49.98
>>678
すみません
UserForm3.WindowsMediaPlayer1.URL = Mov(0)

UserForm3.WindowsMediaPlayer1.URL = Mov(1)
に変えたら出来ました。
初歩的なミスでおはずかしい

681 :デフォルトの名無しさん:2013/01/24(木) 23:19:39.19
Forが1からになってるしね
グロ変数宣言して、mov(1)にしたら動いたよ
うちにDドライブがない都合でちょこちょこ修正させてもらったけど動作は確認できた
ttp://codepad.org/m4zgtVcV

682 :デフォルトの名無しさん:2013/01/24(木) 23:20:46.81
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄

683 :669:2013/01/24(木) 23:39:32.76
質問ついでにもうひとつ教えて下さい。
動画をフォームのサイズに合わせて表示する方法はないでしょうか?
画像でしたらPictureSizeModeで設定できるのですが、動画では
UserForm3.WindowsMediaPlayer1.stretchToFit = True
でもできませんでした。
なにか設定項目があるのでしょうか?

684 :デフォルトの名無しさん:2013/01/25(金) 01:53:29.78
まずはまんこをさらけ出せよ
話はそれからだ

685 :デフォルトの名無しさん:2013/01/25(金) 02:00:45.59
試してないし良くわからんが
メディアプレイヤーコントロールのサイズをフォームのサイズに合わせるだけじゃないの?

686 :デフォルトの名無しさん:2013/01/25(金) 03:00:31.99
>>683
stretchToFitは動画をプレイヤーに合わせる
プレイヤーをウィンドウに合わせるにはResizeイベントの中で自分で幅と高さを設定する

687 :デフォルトの名無しさん:2013/01/25(金) 03:08:34.66
質問でうs、
数独(ナンプレ)の回答を導き出すExcel VBAプログラムを作るとしたら、
多次元配列などを駆使ししてコードだけでやりますか?
Excel のセルを利用しますか?

688 :デフォルトの名無しさん:2013/01/25(金) 03:28:34.24
>>687
セルは問題の入力と答えの表示だけに使う
処理は配列の中だけでやる

689 :デフォルトの名無しさん:2013/01/25(金) 05:23:43.36
解いていく過程も見せたいならセルでやるかもしれんなぁ

690 :デフォルトの名無しさん:2013/01/25(金) 07:51:51.57
>>686
具体的にどう記述したらいいですか?
色々試しましたがぴんときません

691 :デフォルトの名無しさん:2013/01/25(金) 08:20:29.87
>>690
回答者がお前がやったことを回答してきたらどうするんでしょw

692 :デフォルトの名無しさん: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)

しかし、「アプリケーションキー」をクリックしたとき、どちらの関数も呼び出されない。
よって、ポップアップメニューの項目の制御ができない
(正確には、直前に右クリックしたときのメニュー項目となる)

「アプリケーションキー」をクリック後、どちらかのプロシージャを呼び出す手順をご教授ください。
なお「アプリケーションキー」クリックしてポップアップメニューの項目を選択する「マクロの記録」も実行しましたが、
作成されたマクロ関数は処理が無くてコメントだけでした。

693 :桃白白:2013/01/25(金) 13:30:56.33
>>692
関数を用意してアプリケーションキーが押されたときにその関数が呼ばれるようにして
その関数で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

694 :デフォルトの名無しさん:2013/01/25(金) 13:34:50.64
バグwww

695 :デフォルトの名無しさん:2013/01/25(金) 13:37:09.35
>>693
今推されてるキーがアプリケーションキーかどうかを調べる方法がわからないんじゃなくて、
アプリケーションキー入力をトリガーとする方法がわからないのが問題なんだよ。

Excelの機能の範囲では、Worksheet_SelectionChange()で毎回変更するくらいしか思いつかないけど、
そうするとカーソル移動なんかが重くなるのかな。

まあ、「アプリケーションキー入力での動的メニュー変更には対応しない」という仕様であるということに
するのが、一番良いような気がする。

696 :桃白白:2013/01/25(金) 13:43:23.97
>>695
         ____
       /      \
     /  _ノ  ヽ、_  \ そんなこと言われても
    /  (●)  (●)   \    どうすりゃいいのさ
    |     (__人__)    |
    \     ` ⌒´     /
   /´           `\
  /  /          l  l   .
__l  l_.[] _____/_/__
  \, ´-'ヽ
    ヾ_ノ
     |
     |
     |__   コロ・・・・
    _____\    コロ・・・・
   ()__)」

697 :デフォルトの名無しさん:2013/01/25(金) 13:49:07.50
桃白白が好きになってきたw

698 :デフォルトの名無しさん:2013/01/25(金) 13:50:51.63
onkeyでアプリケーションキー取れればそっちで対応できるけど、onkeyってアプリキー非対応みたいだね
あとはサブクラス化ってVBAでも出来たっけ?
まあVB6でも鬼門なくらいだから、出来たとしてもやらない方がいいとは思うけど

699 :デフォルトの名無しさん:2013/01/25(金) 14:54:53.94
常にループさせとけって
キーフック出来るから

700 :デフォルトの名無しさん:2013/01/25(金) 15:00:36.80
節子、それフック違う

701 :デフォルトの名無しさん:2013/01/25(金) 18:30:49.82
フックだチンだ

702 :デフォルトの名無しさん:2013/01/25(金) 18:40:12.96
標準でない機能はAPIを呼ぶしかない

703 :デフォルトの名無しさん:2013/01/25(金) 18:42:19.83
onkeyでSHIFT-F10トラップしたらいけるんじゃね

704 :デフォルトの名無しさん:2013/01/25(金) 20:58:57.53
ホントだ
onkeyではアプリキー指定できないけど、Shift+F10トラップすると
アプリキーも拾ってくれるんだね

これで解決か

705 :デフォルトの名無しさん:2013/01/25(金) 21:42:29.00
セルやシートやブックを対象に何かするときに
アクティベートしている状態でないといけないか、それともアクティベートしなくてもいいか、
その基準みたいなものはありますか?

706 :デフォルトの名無しさん:2013/01/25(金) 21:49:05.03
そういうことへの回答は、不正利用を助長することに成りうるし
操作方法とかではなく仕様についてはメーカーに聞くのが基本なので
MSに問い合わせてください

707 :デフォルトの名無しさん:2013/01/25(金) 21:54:18.46
>>705
セルやシートやブックを対象に何かを行うときはアクティベートしなくても行える。
基準なんて聞いたことがない。

708 :デフォルトの名無しさん:2013/01/25(金) 21:54:18.95
???

709 :デフォルトの名無しさん:2013/01/25(金) 22:08:20.06
アクティベートしてないと30回しか起動できないんだっけ
最近のバージョンのことは知らん

710 :デフォルトの名無しさん:2013/01/25(金) 22:35:14.13
それはアクティベーション

711 :デフォルトの名無しさん:2013/01/25(金) 22:50:29.92
変数宣言
Dim 〜
は、どこでするのが吉ですか?

プロシージャ内で使うローカル変数なら
その変数を初めて使用する直前?
それともプロシージャの先頭?

712 :デフォルトの名無しさん:2013/01/25(金) 22:55:39.44
プロシージャの先頭
コードが冗長になるようなら、変数を使用するときに再度コメントで説明すると吉

713 :桃白白:2013/01/25(金) 23:05:28.38
>>711
桃白白はバラバラかな。関数の最初のところでまとめて宣言するときもあるし
必要になった段階で宣言するときもある。

714 :デフォルトの名無しさん:2013/01/25(金) 23:56:46.32
VBAの作法としてはプロシジャの先頭でまとめて宣言するのが薦められてたような
プロシジャより狭いスコープの変数宣言は出来ないので、使う直前とか止めた方が良いというのが俺の意見

715 :デフォルトの名無しさん:2013/01/26(土) 00:12:00.96
見通しが悪くなるような長いモジュールは作らない方がいい
だから先頭で一括が推奨される

716 :桃白白:2013/01/26(土) 00:21:39.05
>>714
でもさ、見た目が気になるときってあるじゃん。これあとのほうで
使う変数なんだけどみたいな。ほかのところで使われたらおかしいんだけどみたいな。
最初のところで全部宣言しちゃったらそこんとこわかりづらくなるんだけどみたいな。
そんなときってあるじゃん?だからさ、ケースバイケースの桃白白方式が大吉だと思うんだよね。

717 :デフォルトの名無しさん:2013/01/26(土) 00:22:34.89
カプセル化して呼び出すのが理想
引数が面倒・・・

718 :デフォルトの名無しさん:2013/01/26(土) 02:20:56.19
まずはまんこをいじりまくれ

719 :デフォルトの名無しさん:2013/01/26(土) 06:16:51.91
>>716
変数の宣言が先頭にあったり、途中にあったりすると書き方の統一性が取れていない。
こういうのがあると他の部分も統一取れていないグチャグチャのコードなのか?と疑う。
精神的に無駄に疲れる分よくないな。

720 :デフォルトの名無しさん:2013/01/26(土) 07:00:22.53
単純に行数節約を目的に先頭がさ、俺は好きだよ。

721 :デフォルトの名無しさん:2013/01/26(土) 07:18:16.58
>>716
その「後の方」って表現が出るほど、一つのプロシージャにだらだらとコード書かずに
細かくプロシージャ分けて、読解性、視認性、メンテナンス性を上げていこうって話だよ

まあそういうのは大規模なプロジェクトでより活きてくるから、桃白白にはまだ
理解の及ばない域かもしれないけど覚えて置いた方がいい

722 :桃白白:2013/01/26(土) 09:18:14.70
>>721
なんなの!?性を連呼して、変態。
関数は分ければいいってもんでもないしあえて一つの関数に書くときもあるっしょ。
あっち見てこっち見てさせるよりは一箇所に記述したほうがいいときもあるっしょ。
そんなとき、そんなときなんですよ、変数、関数の最初に宣言しないほうがいいっす。

723 :デフォルトの名無しさん:2013/01/26(土) 09:28:26.01
  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;  変数、関数の最初に宣言しないほうがいい・・・
  ヾ;;;ハ    ノ       .::!lリ;;r゛
   `Z;i   〈.,_..,.      ノ;;;;;;;;>  そんなふうに考えていた時期が
   ,;ぇハ、 、_,.ー-、_',.    ,f゛: Y;;f.   俺にもありました
    ~''戈ヽ   `二´    r'´:::. `!

724 :デフォルトの名無しさん:2013/01/26(土) 09:34:11.31
この流れ多いよね
白濁が納得する理屈や表現を示してあげるまで続きます的な流れ
白濁のどや顔な比喩表現とか面白くなくて逆に面白いから別にいいけどさ

725 :桃白白:2013/01/26(土) 09:35:58.80
>>723
あのころの自分を思い出せ、変数は関数の最初に宣言しないほうがいいんだ。

726 :桃白白:2013/01/26(土) 09:40:26.59
>>724
3回読んだら白濁が桃白白のことなんじゃないかと疑問に思えてきたんだけど、
桃白白のことじゃない、問題ない、桃白白はまだやれる。

727 :デフォルトの名無しさん:2013/01/26(土) 09:41:52.43
だからそう思ってたってばてば
後にデメリットの方が大きく過ちだったと気付いたが、両方経験してる俺には君の主張も理解できるが
未だ変数冒頭宣言の有意さに気付いてない君には、一方の利点しか見えていないわけだ

728 :桃白白:2013/01/26(土) 09:48:08.09
>>727
そのおっきいデメリットってなあに?桃白白はケースバイケースという立場だから
立場としてそんなにかわらないと思うけどおっきいデメリットは思いつかない。

729 :デフォルトの名無しさん:2013/01/26(土) 09:52:40.83
質問です。野暮な質問ですが教えてください。
エクセルのブイビーエーな質問スレで話さないといけないんですか?他にふさわしいスレッドはないのですか?

730 :デフォルトの名無しさん:2013/01/26(土) 09:54:20.66
2chは初めてか?
とりあえず肩の力抜けよ

731 :デフォルトの名無しさん:2013/01/26(土) 10:07:01.26
>>729
パイパンは面白おかしく書いてるが他の人はまじめに書いてるし
エクセルVBAに役に立つ話題だからここでして欲しい
と思う俺は先頭で宣言する派

ってか、途中で宣言するぐらいならそこは別プロシージャにしろと

732 :桃白白:2013/01/26(土) 10:15:36.93
>>731
桃白白超まじめなんだけどー。
関数は変数の宣言場所とは関係なく機能でわけるべきっすよ。
変数を関数の先頭で宣言しないおっきいデメリットって結局なんなの?
よくわかんなかった。

733 :731:2013/01/26(土) 10:26:26.73
>>732
>関数は変数の宣言場所とは関係なく機能でわけるべきっすよ。

その機能というものをひとつのプロシージャあたりひとつに絞って、
それらを組み合わせて全体のプログラムにするってのが
オブジェクト指向の基本的考え方なんじゃない?

デメリットっていうか、
スコープの範囲内で見通せる規模のプロシージャなら
先頭で宣言してなんの問題もないわけで、
途中で宣言しないと分からなくなるような構造って
もっと整理してコンパクトにまとめるべきだと思うんだ。

まぁおれは>>727さんじゃないから
この考えで合ってるかどうか分からないけど

734 :桃白白:2013/01/26(土) 10:34:54.59
>>733
オブジェクト指向はオブジェクト作っちゃいましょってやつだから
関数を定義してそれを呼んじゃいましょというのは構造化プログラミングだろうけど、
わからなくなるかどうかで判断したら開発するときと保守するときで
変わってきちゃうじゃない。開発するときはわかったんだけどーみたいに
なっちゃわない?だから変数の宣言場所と関数の分割単位はわけて考えないとまずいっしょ。

735 :おんなのこ:2013/01/26(土) 10:36:33.56
>>718
きもちょくなってきたゎ
つぎはどぅするの?

736 :731:2013/01/26(土) 10:41:08.19
>>734
>開発するときはわかったんだけどーみたいに
なっちゃわない?

それ多分、途中で宣言するようなプロシージャでこそ起こりうる問題だと思う。

だらだら長いコード書いて最初に宣言した変数が訳わからなくなるのは
宣言した場所が拙いんじゃなくて、そんな長いコード書くのが悪いって考え方なのよ
おれは。

737 :桃白白:2013/01/26(土) 10:57:21.91
>>736
それは長いコードがだめだって話ね。
変数を途中で宣言するとコードが長くなるって思ってるわけね?ああわかった。
じゃあコードが長くならなければ変数を途中で宣言してもデメリットはないってことでいいわけね。

738 :デフォルトの名無しさん:2013/01/26(土) 10:58:48.54
長いというよりも、複数の機能的処理が混在しているのが良くない

739 :桃白白:2013/01/26(土) 11:01:25.55
>>738
桃白白は関数を機能で分割するべきだって立場だからそれはそうだと思う。

740 :デフォルトの名無しさん:2013/01/26(土) 11:03:51.62
WordのVBAを
Excelの個人ファイルみたいなところに保存して
どのWordファイルに対しても実行できるようにしておきたいんですが
Normalに書いたコードが保存できません。
どうすればいいですか?

741 :731:2013/01/26(土) 11:51:47.92
>>737

>変数を途中で宣言するとコードが長くなるって思ってるわけね?ああわかった。

違う、順番が逆
コードが長いから変数を途中で宣言したくなるんだと思ってるの

>じゃあコードが長くならなければ変数を途中で宣言してもデメリットはないってことでいいわけね。

メリット・デメリット って事は俺が言ってるわけじゃないんで
俺に聞かれても答えようが無いけど、
じゃあ逆に変数を途中で宣言するメリットってなんだろうと考えると
多分その変数で処理を行う部分の近くで宣言した方が
その処理の動作が分かりやすい
ってことなんだと思うのね。(違ってたらごめん)

で、最初に戻るわけなんだけど、処理内容が見通せないような複雑なものだったら
それはさらに分割してより単純な処理を組み合わせたもので実現しよう
という考え方を称して「短いコード」とか「長いコード」と言ってるわけですよ。
だからそういうコードならはじめに変数をまとめて宣言しておくことに
なんのデメリットもないし途中で宣言することにもメリットが無いってことです。

742 :デフォルトの名無しさん:2013/01/26(土) 12:07:12.84
なかなか上手くまとめてくれたが、はてさて桃白白の頭で理解に及ぶだろうか?

743 :桃白白:2013/01/26(土) 12:35:21.22
>>741
機能で関数をくくっていくと関数を分割しても見通しが悪くなるだけの
ときっていうのはあるわけっすよ。そういうときは変数を途中で宣言しちゃったら
いいじゃんっていうのが>>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

744 :デフォルトの名無しさん:2013/01/26(土) 12:39:41.82
これは酷い
ここまでレベル低かったとはw
もうちょっと解ってる奴だと思ってたのに・・・

でも余計に可愛いかもw

745 :デフォルトの名無しさん:2013/01/26(土) 12:52:52.57
>>743
俺だったらそういう時はfuga単体でファンクションプロシージャ作るよ

746 :デフォルトの名無しさん:2013/01/26(土) 12:55:10.77
もうさ、変数は
dim hensuu() as variant

で宣言して、使うときに増やしてけばいいじゃん
それでいいじゃん

747 :デフォルトの名無しさん:2013/01/26(土) 13:00:02.74
>>746
変数が管理できない上に動作も遅くてメモリも浪費する
良いことなんもない

748 :桃白白:2013/01/26(土) 13:01:47.96
>>745
どう書くのよ?書いてみてよ。書いてごらんなさいよ。
書いて桃白白に教えてくれちゃったらいいじゃんよ。

749 :デフォルトの名無しさん:2013/01/26(土) 13:12:15.36
>>747
どんな化石PC使ってるんだ
ってのと
じゃあエクセル使うなよ
っていう2つのツッコミを思いついた

PC性能なんて年々上がるんだから、エクセルで作る程度のシステムでメモリ気にするなんてほぼ無意味だし
動作なんてよっぽどじゃない限り考える必要ない

そもそも配列で動作重くなるって何よ
コードが複雑になるとかなら判るんだけど
メモリ上一括領域を確保するんだから、早くなるんじゃないの?

750 :デフォルトの名無しさん:2013/01/26(土) 13:17:22.85
>>746
それに近いと思うんだけどさ
各基本型の変数は3つずつぐらい最初から用意しておいて欲しい
参照渡し用の一時変数を先頭に宣言しても見づらいだけ

あとメソッド細分化のデメリットは
あるメソッドの引数追加で呼び出し元が10個あって修正が大変な事がある

751 :デフォルトの名無しさん:2013/01/26(土) 13:29:27.76
>>750
> 呼び出し元が10個
ってほど多用する処理なら、むしろ細分化せずに10カ所に
同じようなコード書いてる場合の方が修正大変だろw

細分化してあれば修正忘れがあってもエラー出るから分かるが
あちこちに点在させてると、修正忘れがあった場合に、
エラー出ずに想定外(修正前)の動作するからややこしいことこの上ない

もうちょっと深く考えてから書かないと恥かくだけだぞ

752 :デフォルトの名無しさん:2013/01/26(土) 13:36:26.14
>>750
そういう時の為にユーザー定義型があるのだが。

753 :デフォルトの名無しさん:2013/01/26(土) 13:46:22.76
2箇所から呼ばれてて呼び出し階層の上から下までで5個とかだったかな
まぁ何事も程々にね
メソッドは前提条件と役割(何をどこまでやるのか)をきっちり定義して作ってかないと
細分化は結果だから下手にやろうとすると俺みたいになっちゃうよ
初心者は無理にやる必要は無いが結論
自分以外が手をいれる環境でもやらない方がいい

754 :デフォルトの名無しさん:2013/01/26(土) 13:55:20.63
>>752
それこそメンドクサイ
データ項目ならいいというか最初からそうするよ
制御用のなんたらフラグだったら?
FugaArgument型に作るの?
オーバーロードの無い言語であんまり無理しちゃダメだよ

755 :デフォルトの名無しさん:2013/01/26(土) 14:29:31.14
>>753
じゃいつやるの?今でしょ。

756 :デフォルトの名無しさん:2013/01/26(土) 14:35:56.58
>>754
別にフラグでも問題ないし。
プロシージャ用にユーザー定義するのも有りだと思う。
勿論そのプロシージャはきちんと機能別に分けられている必要があるけど。

この機能のパラメータという意味でのユーザー定義型だからデータ項目と何ら変わらない。
しかもパラメータが増えても引数が増えるわけではないしね。

757 :デフォルトの名無しさん:2013/01/26(土) 14:38:40.16
普通に変数使うのが一番楽だっていうのにお前ら・・・

758 :デフォルトの名無しさん:2013/01/26(土) 14:40:19.72
>>743
突っ込みどころ満載のコードだなw

759 :桃白白:2013/01/26(土) 14:50:12.75
>>758
その満載の突っ込みどころを披露しちゃいなよ。
できればコードという形が望ましいけれども、
それがめんどうなら文だけでもいいからさ。いっちゃいなユー。パイパイがそれ聞いちゃうからさ。

760 :デフォルトの名無しさん:2013/01/26(土) 15:05:14.86
>>755-756
一人でそんな事してたら職場で浮いてしまう
>>755先輩のコードなんかすごいけど修正しずらいよな
なんて影で言われてないか?

761 :デフォルトの名無しさん:2013/01/26(土) 15:28:20.31
パイなんとかって自分のこと名前で呼ぶんだねそういえば

762 :デフォルトの名無しさん: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じゃなくてワークシートで関数を書いてる時、入れ子の入れ子でわけわかんなくなってくることがよくある

763 :桃白白:2013/01/26(土) 15:56:27.10
>>762
桃白白は2番だな。2番のほうがいかしてる。
1番は引数のどれとどれが対応するのかわかりづらいし
呼ばれる順番もぱっと見てわかりづらい。行数を減らすことは
できるけれど行数減ってもあまりうれしくない。

764 :758:2013/01/26(土) 16:36:46.21
>>759
こんなふうに書くのがあっさりしてる。
直すところはもっとあるけど。

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

765 :デフォルトの名無しさん:2013/01/26(土) 16:39:14.28
>>759
で、こっちがツッコミ。
サンプルコードだから、それなりに省略しているという背景は抜きにした話。

・引数が値渡しか参照渡しか明示されていないので、
 引数を書き換えていいという意図があるのか単に記載漏れなのか判断できない。
 ようは設計者の意図が伝わってこない。

・Hogeプロシージャの型が省略されているので何型で返してもいいという判断になる。
 プロシージャのコール元で期待している型と違う型が返ってくる可能性が十分にある。
 コール元でValiant型の変数で受けて型を特定して変更するのは面倒。
 そもそもどんな型が返るのかわからない設計ってまともに設計できてるのか?

・valueの宣言が無い。

・fugaの値のチェックが無い。
 fugaの値がおかしいかどうかこの時点で想定できるのならチェックが必要。
 fugaの型がわからないからこその例外が発生しそう。

・Ifステートメントの後で処理が追加された場合、処理の修正が増える。
 今回の場合は
 Set Hoge = Fizz・・・
 をIfステートメントの外に出す必要が出てくる。

766 :デフォルトの名無しさん:2013/01/26(土) 16:56:58.21
>>765
> サンプルコードだから、それなりに省略しているという背景は抜きにした話。

そんな突込みして、楽しい?

767 :デフォルトの名無しさん:2013/01/26(土) 16:57:48.10
>>765
その指摘はそれだけ見れば間違ってはないが
もはや議論の中心が何かを見失ってるとしか思えん

そろそろ別の場所でやってくれ

768 :デフォルトの名無しさん:2013/01/26(土) 17:02:47.15
>>765
コンパイラさん?擬人化するなら幼女でお願いします

769 :デフォルトの名無しさん:2013/01/26(土) 17:28:06.23
>>766
暇つぶし。

770 :デフォルトの名無しさん:2013/01/26(土) 17:33:39.35
>>765
>・fugaの値のチェックが無い。

arg1, arg2 のチェックは要らんのか?

突っ込むならもっとちゃんと突っ込めよ…

771 :デフォルトの名無しさん:2013/01/26(土) 17:52:33.01
>>605
おれ、今の会社辞める前に Ctrl + H で片っ端から変数を
Local_Variable_Integer_Temporary_Counter_Level001
系に書き直してから去ることにするわ。

有益な情報をありがとう。

772 :765:2013/01/26(土) 17:54:40.39
>>770
スマンw

773 :デフォルトの名無しさん:2013/01/26(土) 17:58:57.91
>>771
そんなに悔しかったの?

つーか無職が「今の会社」って・・・w

774 :デフォルトの名無しさん:2013/01/26(土) 18:05:24.39
>>773
誰と勘違いしてんの?
こんなスレあると知らんかったから興味深く読んで、
で、この発想おもしれーなと思ったから書き込んでみただけです。

性格の悪い先輩の洗礼を受けたということで、
大目に見てあげるよ。

775 :デフォルトの名無しさん:2013/01/26(土) 18:16:39.22
カマ掛けに反応してくれてありがとう

776 :デフォルトの名無しさん:2013/01/26(土) 18:32:31.69
(無)自宅警備をいよいよ辞めるんだな

777 :デフォルトの名無しさん:2013/01/26(土) 18:46:01.53
感じわり〜

778 :デフォルトの名無しさん:2013/01/26(土) 18:55:53.79
>>771=>>774の感じ悪さというか陰湿さは異常

779 :デフォルトの名無しさん:2013/01/26(土) 19:03:30.11
>>778
いや、771=774もだが、
それに粘着してるお前も感じ悪いよ

カマ掛けに反応してくれてありがとう(ドヤァ
無職(ドヤァ

絶対友達いない

780 :デフォルトの名無しさん:2013/01/26(土) 19:24:25.43
普通無職がエクセルVBA使わないと思うんだがどうか

781 :桃白白:2013/01/26(土) 19:35:27.55
>>780
おいやめろ

>>765
(; ・`д・´)あーなるほどそういう感じね予想通りだわ・・・

782 :デフォルトの名無しさん:2013/01/27(日) 01:21:13.54
>>479
処理直前にDimしてるぅ!プークスクス
まあ、読みやすいっちゃ読みやすい。

783 :デフォルトの名無しさん:2013/01/27(日) 06:15:10.83
まんこにちんこ突っ込むと気持ちいい?

784 :デフォルトの名無しさん:2013/01/27(日) 07:34:20.45
兄貴のケツ穴のほうが気持ちいい

785 :デフォルトの名無しさん:2013/01/27(日) 07:49:56.21
>>783
すまんが童貞は引っ込んでろ。

786 :デフォルトの名無しさん:2013/01/27(日) 14:39:13.30
ちんこにまんこ突っ込むほうが気持ちいい

787 :デフォルトの名無しさん:2013/01/27(日) 18:18:43.34
尿道に綿棒突っ込むと気持ちいい

788 :デフォルトの名無しさん:2013/01/28(月) 01:11:43.06
まんこはみんなのもの

789 :デフォルトの名無しさん:2013/01/28(月) 01:31:05.38
誤ってスレを閉じていたらしくてスレの伸び具合に驚いている
最近のスレの出来事を三行でおなしゃす

790 :デフォルトの名無しさん:2013/01/28(月) 02:18:21.34
>>789
別に
知らなくても
なんの影響もない雑談

791 :デフォルトの名無しさん:2013/01/28(月) 11:01:49.58
変数は関数の先頭でまとめて宣言する派が多いけど、俺は必要になったその場で宣言する派。
これは、そう書ける言語ならいつでもそうする。

そうしない派も、
Dim var as Long = 100
とか、
Dim obj as Class1 = new Class1("abc")
とか書けるなら、必要なときに定義しようと思うんじゃ無いかな。

792 :デフォルトの名無しさん:2013/01/28(月) 12:12:46.17
それ出来る言語も使ってるけど、そっちでも先頭宣言だな

逐一宣言の方が書いてる時は書きやすいから、使い捨てのVBSとかだと
プロシージャ分けもせず、先頭からズラズラ書いて必要な時に宣言したりもするけど
更新やメンテナンスしながら使うものだと、安直な書きやすさより
後々のメンテナンス性を考慮したいからなぁ

793 :桃白白:2013/01/28(月) 12:41:32.00
>>792
関数の最初に変数を宣言することでえられる保守しやすい性質て具体的にどういうものなの?
桃白白はそんなものないと思ってるの。

794 :デフォルトの名無しさん:2013/01/28(月) 12:51:18.82
まだそれが理解できるレベルに到達してないんだね
頑張れ桃白白!、負けるな桃白白!、闘え僕らの桃白白っ!!

795 :桃白白:2013/01/28(月) 12:54:40.20
>>794
うん、桃白白はその境地にたっしてないけど、お前がそれを説明できるレベルにたっしてるのであれば
それを教えちゃってよ。桃白白にささやいてくれてよ。叫んでくれてもかまわない。桃白白のすてきな
形の耳で聞いちゃうからさ。いっちゃいなよ。聞いちゃうからさ。

796 :デフォルトの名無しさん:2013/01/28(月) 12:58:37.12
パイパイ卑猥

797 :デフォルトの名無しさん:2013/01/28(月) 13:26:24.33
>>792
> 逐一宣言の方が書いてる時は書きやすいから

先頭宣言方式は、書きやすいと言うこともなく、宣言と使用する場所が離れて読みやすいということもなく、
コードを数行追加するときに新たに変数が必要になったときなどに、離れた場所に追加しなくてはならず、
コードの一部分をリファクタリングするとき、変数を削除し忘れて「unused variable」になったりする。

さらに初心者は、長い大きな関数を書きがちで、関数先頭に10個20個の変数がずらずら並んでたりする。

逐一宣言方式のデメリットってなんかある?

798 :デフォルトの名無しさん:2013/01/28(月) 13:28:45.08
そもそも、オブジェクト指向言語では、Newしない場合は宣言と定義が同一行となり、
メソッド先頭にまとめてやるなんてことができないはずだが。

799 :デフォルトの名無しさん:2013/01/28(月) 13:29:51.63
なんか逐一宣言がいいって言ってるやつを見てると
昔の自分を見ているようで微笑ましい

800 :デフォルトの名無しさん:2013/01/28(月) 13:35:33.65
>>799
何の言語を使ってるのか言ってごらん。

801 :デフォルトの名無しさん:2013/01/28(月) 13:39:16.10
奇怪語とバイナリだな

802 :799:2013/01/28(月) 13:39:35.33
日本語

803 :デフォルトの名無しさん:2013/01/28(月) 13:49:25.92
しょ、小学生だー!



なでしこっていいよね

804 :デフォルトの名無しさん:2013/01/28(月) 13:51:23.54
ばいなら

805 :デフォルトの名無しさん:2013/01/28(月) 13:55:58.42
>>795
Code Completeは読んだ?
Code Completeでは、明確に「変数は最初に使用する場所の近くで初期化する」のが推奨されている。
自身を持って、今の方針でやってけばいいよ。

なお、http://likealunatic.jp/2011/06/js_variable.php にちょこっとCode Completeの内容に言及してる。

806 :桃白白:2013/01/28(月) 14:10:56.10
>>805
たぶん読んでない。読んだとしてもかんぜんに忘れてる。1ミリも覚えてない。
リンク先を読んでみるわ。

807 :デフォルトの名無しさん:2013/01/28(月) 14:32:35.33
だから最初から言ってるじゃん
言い方を変えると、「途中で変数を宣言したくなる場所」ってのは、「そこでモジュールを分割すべき場所」なんだよって

808 :デフォルトの名無しさん:2013/01/28(月) 14:42:36.90
>>807
途中で変数を宣言したくなる場所はどこかって話じゃ無くて、変数を宣言する場所をどこにするのが
良いのかって話なんだが。

809 :デフォルトの名無しさん:2013/01/28(月) 14:53:27.17
>>808
まずは>>805のリンクを読め

810 :565:2013/01/28(月) 15:07:07.41
>>807
ByRef用変数でも?

811 :デフォルトの名無しさん:2013/01/28(月) 15:08:21.66
判ればどこでもいい
トップに変数やコードの目次と説明書いて
変数宣言行を自動追加すりゃいいじゃん

じゃん

812 :デフォルトの名無しさん:2013/01/28(月) 15:09:20.23
名前ミスった
タオパイじゃないからね

813 :デフォルトの名無しさん:2013/01/28(月) 15:14:24.06
>>809
はて。
>>805=>>808=俺なんだが。

814 :デフォルトの名無しさん:2013/01/28(月) 15:35:43.08
理解してないのか

815 :692:2013/01/28(月) 15:43:53.34
喧々諤々のところ失礼します。692です。
皆様のアドバイスにより、対処できましたことを報告します。
ご助力ありがとうございました。

対処方法は、ご指摘にありましたとおり、アプリケーションキー(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

いろいろとご助力いただき勉強になりました。ありがとうございました。

816 :デフォルトの名無しさん:2013/01/28(月) 16:24:43.79
>>814
ほのめかしだけじゃ会話は続かないよ。
何を理解していないといいたいの?

817 :デフォルトの名無しさん:2013/01/28(月) 16:41:41.15
関数の先頭で、まとめて変数宣言したいが為に、する必要も無い関数分割をするのは本末転倒

818 :デフォルトの名無しさん:2013/01/28(月) 18:13:08.96
とんちネタのつもりで言ってるの?
まさか本気じゃないよね?

819 :デフォルトの名無しさん:2013/01/28(月) 23:26:25.34
>>797
たとえばコードを追加すような場合
新しい変数を宣言して使いたいときに、そのプロシジャ全てをチェックする必要がある
宣言をまとめておけば、そこをチェックするだけでその変数が使われてるかどうか解る

とりあえずより狭いスコープで変数が定義できる別の言語の話と一緒にはするな
変数のスコープが見通せるような範囲で納められるなら、その場で宣言で良いさ

820 :デフォルトの名無しさん:2013/01/28(月) 23:26:53.67
むせる

821 :デフォルトの名無しさん:2013/01/29(火) 00:02:46.31
さよならは

822 :デフォルトの名無しさん:2013/01/29(火) 00:08:04.45
>>821
http://www.youtube.com/watch?v=iKav_BCb6Zs

823 :デフォルトの名無しさん:2013/01/29(火) 00:18:15.55
>>819
まあそこまで大きなプロシージャを作らないこったな
理想論ではあるが

824 :デフォルトの名無しさん:2013/01/29(火) 00:38:25.64
>>819
検索機能使えよ…

825 :デフォルトの名無しさん:2013/01/29(火) 01:22:37.43
桃白白は童貞の無職

826 :デフォルトの名無しさん:2013/01/29(火) 01:58:30.17
>>819
チェックってビルド時にわかるだろ?

827 :デフォルトの名無しさん:2013/01/29(火) 05:20:03.34
Dim D: Set D = CreateObject("Scripting.Dictionary")
みたいな涙ぐましい書き方する人おらんのー?

828 :デフォルトの名無しさん:2013/01/29(火) 05:35:49.30
とりあえず無職とか童貞とか言ってる奴、人間としてどうよ。
例えば職場の人に、自分の書き込みばれたとこ想像してみ?

え?あの人が?!って驚かれるの?
それとも、あーやっぱりwwwってなるの?w

もうそんな低レベルな煽りをする年齢でもないだろ。
お前と同じ年で子どもいる奴だっているのに。

829 :デフォルトの名無しさん:2013/01/29(火) 07:59:17.15
その性格悪そうな嫌味ったらしい書き込みの方が、リアルでバレたらどん引きされる件について

830 :デフォルトの名無しさん:2013/01/29(火) 09:24:10.69
>>828
2chでマジレスとかw

831 :デフォルトの名無しさん:2013/01/29(火) 10:38:04.14
>>819
VBA以外で使ってる言語と、その言語で関数/メソッド先頭に固めて変数宣言/定義してるか教えてくれ。

最近の言語であれば、大抵の人は変数を逐次宣言/定義する派だと思うが、宣言をまとめたいとは思ってないと思うよ。

> とりあえずより狭いスコープで変数が定義できる別の言語の話と一緒にはするな
何と何を一緒にするなと?
より狭いスコープで変数が定義できる別の言語って何?

832 :デフォルトの名無しさん:2013/01/29(火) 10:45:55.33
変数を先頭にまとめようとして行が増えすぎて、
Dim i, j as Long
とかやっちゃう人

833 :デフォルトの名無しさん:2013/01/29(火) 11:29:22.80
???
先頭に移動しても行は増えないだろ?
コピーじゃなくて移動なんだからさ

あ、悔し紛れのネガキャンかw

834 :デフォルトの名無しさん:2013/01/29(火) 11:40:29.71
ide によって利便性や可視化、メンテ効率まったく異なるからなあ

835 :デフォルトの名無しさん:2013/01/29(火) 11:58:49.23
>>833
変数宣言行が増えるってことだよ
で、10行20行と増えちゃって、>>832みたいにやっちゃう初心者が出てくる

836 :デフォルトの名無しさん:2013/01/29(火) 12:17:06.71
2つの変数を1行にまとめるのと、宣言を先頭にまとめるのは全然関係ないじゃん
なんで無関係の話を持ってきてややこしくするの

837 :デフォルトの名無しさん:2013/01/29(火) 12:31:55.17
頭が悪いかネガキャンかのどちらかだろ

838 :桃白白:2013/01/29(火) 12:49:45.25
>>832
Option Strictがあればいんだけどな。
Javaとかだとint i, jでどっちもintになるから
じゃあi, j As IntegerでどっちもIntegerにしてくれても
いいじゃんと思っちゃう。

839 :デフォルトの名無しさん:2013/01/29(火) 13:03:07.32
C99で変数宣言がブロック途中でもOKになったのは、そういう要求があったから。
最初からブロック途中で変数宣言OKなVBAなのに、その機能を使わないのはもったいない。

840 :デフォルトの名無しさん:2013/01/29(火) 13:24:10.24
>>831
俺もVBAとJavaScript以外はその場宣言する方が多い
他の言語ってのはたとえばVB.Net 例をあげると

If 条件1 Then
&nbsp; &nbsp; Dim hoge As Integer
&nbsp; &nbsp; hoge = func1()
End If
'
'ここに上下見通せないぐらいのコード
'
If 条件2 Then
&nbsp; &nbsp; Dim hoge As Integer
&nbsp; &nbsp; hoge = func2()
End If

VB.NetではOKだけどVBAではNGな例
他人のプログラム修正で下のIfのとこ追加したことを考えてくれ

ぶっちゃけ最初から最後まで一人で保守するならどっちでもいい
そうじゃないならVBAなら後から見る人のためにも宣言はまとめとけと思うのさ

841 :デフォルトの名無しさん:2013/01/29(火) 13:36:14.15
>>838
Option Strictあっても、ObjectにInteger代入ではエラーにならなかったような
そう言うやつが多いから今のVB.NetではそれでどっちもIntegerになるようになった

842 :デフォルトの名無しさん:2013/01/29(火) 13:38:29.43
>>840
宣言が重複したらすぐにエラーになるから、

If 条件2 Then
  Dim fuga As Integer
  fuga = func2()
End If

って書き換えればいいよ。

> そうじゃないならVBAなら後から見る人のためにも宣言はまとめとけと思うのさ

後から見る人のために、宣言と使用箇所の距離を短く、変数の有効範囲を狭くしましょうというのが、
Code Completeなんかで説明されてること。

843 :デフォルトの名無しさん:2013/01/29(火) 13:46:30.06
一行宣言ってバグ起きるからやりたくないんだが
タナカでも頻繁にやってた気がするけど

Dim l,m as long って宣言したら
mはlongだけどlはvariantになる

俺の環境だけか?

844 :デフォルトの名無しさん:2013/01/29(火) 13:48:48.75
>>840
例えば、Cの例なんだけど、
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.1.list
このゲロが出そうな変数定義見て、なんとも思わない?

ここで定義されてる変数は39個なんだけど、それぞれ使用箇所直前で定義されてたら、
少しは読みやすくなるし、リファクタリングもし易くなると思わない?

845 :デフォルトの名無しさん:2013/01/29(火) 13:50:28.25
>>843
lもlongのつもりで使えばバグは起きないよ

846 :デフォルトの名無しさん:2013/01/29(火) 13:56:55.63
変数宣言の意味がないなそれ
エクセルじゃまずやらんけど、メモリアドレス直接弄ったりダンプしたりするとき、変数の型データが違うと全部ずれることがある
バグ起きないんじゃなくて、想定しなきゃいけないエラー原因無視してるだけだからなー

847 :デフォルトの名無しさん:2013/01/29(火) 14:01:20.68
>>846
代入も評価もlongの文脈で使えばバグは起きないよ
暗黙の型変換を期待するコードを書くとバグるかもしれないけど

848 :デフォルトの名無しさん:2013/01/29(火) 14:06:01.02
Cだと、スコープを狭めるために無名ブロックとかdo while(0)とかのバッドノウハウがはやったりもしたよなぁ

849 :デフォルトの名無しさん:2013/01/29(火) 14:18:41.94
>>832
もしかしてこれiはlongにならないの…?

850 :デフォルトの名無しさん:2013/01/29(火) 14:19:33.58
>>843
当たり前の話だが...
Dimは「変数を宣言する」事を宣言するステートメントだ
その変数がなんなのかを宣言しているのは「as」の後ろだぞ

君の言う「Dim l, m as long」は「Dim m as long, l」と等しいんだぞ
つまり、「mはlongである」と宣言しているが、「lは変数である」としか宣言されていない

851 :デフォルトの名無しさん:2013/01/29(火) 14:30:26.98
>>850
全てわかった上で「当たり前の話」とか言われても・・・

852 :デフォルトの名無しさん:2013/01/29(火) 14:34:51.25
いや、でも気にしたこと無かったわ
言われてみればそうだな

853 :デフォルトの名無しさん:2013/01/29(火) 14:44:21.08
>>840
> 俺もVBAとJavaScript以外はその場宣言する方が多い

VBAとJavascript以外の言語では、何のためにその場宣言をするの?

854 :デフォルトの名無しさん:2013/01/29(火) 14:44:32.92
>>851
「当たり前の話」を「当たり前として放置」しているから、「当たり前の話」をしたんだけどな

855 :デフォルトの名無しさん:2013/01/29(火) 14:49:44.45
VBAで型が書いてない変数はVariant型になる
両方ともIntegerにしたいなら

Dim i As Integer, j As Integer

のように全部の変数に型を指定しなきゃいけない

856 :デフォルトの名無しさん:2013/01/29(火) 14:49:45.23
DimとAsの間を全部As以降の型として宣言できる、という言語仕様でもよかったよね
つまり、何が当たり前かなんかどうでもいいこと

857 :デフォルトの名無しさん:2013/01/29(火) 14:53:59.09
>>856
それはどうかな?
VB系の場合は、変数をVariant型で利用するのが「当たり前」なんだと思うよ

どうしても「as」が必要な場面って、関数の引数だけじゃないかな?

858 :デフォルトの名無しさん:2013/01/29(火) 14:54:18.61
>>856
なんでそうしなかったんだろうねぇ
Dim i, j, k As Integer
で、iもjもkもIntegerで宣言されるってのが「普通じゃない」と思う人多数ってことなのか

859 :デフォルトの名無しさん:2013/01/29(火) 14:55:12.69
>>857
> VB系の場合は、変数をVariant型で利用するのが「当たり前」なんだと思うよ

じゃ、Option Explicitなしでいいんじゃね?

860 :デフォルトの名無しさん:2013/01/29(火) 15:02:12.68
>>857
> どうしても「as」が必要な場面って、関数の引数だけじゃないかな?
仮引数を型付きで定義するんなら、実引数側も型を明示した方が良いという思考にはならないかな。

861 :デフォルトの名無しさん:2013/01/29(火) 15:02:49.30
vbsからの流れを見るに858なんだろうな
無しで良かったから、追加機能としてつけられたんであろう859

862 :デフォルトの名無しさん:2013/01/29(火) 15:05:23.41
Code CompleteではVariant推奨だったが、その点だけは同意できなかったよ。

863 :デフォルトの名無しさん:2013/01/29(火) 15:05:37.63
>>859
何を言っているのか理解が出来ない...
Option Explicitは、「変数を利用する場合に、変数の宣言を強制する」ステートメントであって、「宣言する変数に型を強制する」ステートメントでは無いぞ

864 :デフォルトの名無しさん:2013/01/29(火) 15:16:36.86
>>857
そして、システムハンガリアンの登場ですね

865 :デフォルトの名無しさん:2013/01/29(火) 15:19:21.58
>>844
なんてコードみみせてんだ、きたねえw
機能を分離して関数として分別しとけよ。

866 :デフォルトの名無しさん:2013/01/29(火) 15:24:21.29
>>896
単なるVBはそうかもしれんが、VBAじゃ型明示&アーリーバインド推奨

867 :デフォルトの名無しさん:2013/01/29(火) 15:29:04.11
>>860
ならない

>>864
理想論から話を進めれば、人の書いた関数の中身なんて気にしない

868 :デフォルトの名無しさん:2013/01/29(火) 15:32:22.76
>>867
dim 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
とかやってんの?

なんたる苦行

869 :デフォルトの名無しさん:2013/01/29(火) 15:40:10.07
>>868
型を宣言しても、宣言しなくても、setしなきゃ使えないんじゃないの?

870 :デフォルトの名無しさん:2013/01/29(火) 15:43:27.74
>>869
もちろんsetするけど、それと型明示と何か関係が?

871 :デフォルトの名無しさん:2013/01/29(火) 15:56:15.39
>>870
質問の意味がわからん
>>868は、
Dim w, r
と宣言するのは
Dim w as worksheet, r as range
と宣言するよりも苦行だと言うから
結局、setするなら、どっちも一緒だろって言いたいのだが

872 :デフォルトの名無しさん:2013/01/29(火) 16:00:43.58
>>871
あれ?あなた>>857なんじゃないの?

> VB系の場合は、変数をVariant型で利用するのが「当たり前」なんだと思うよ

っていうから、じゃworksheetとかrangeの場合も変数宣言時に型明示しないの?それって苦行だよねってことなんだけど。

873 :デフォルトの名無しさん:2013/01/29(火) 16:07:29.23
>>872
だから、変数宣言時に型を宣言しても、なんも意味無いじゃん

874 :デフォルトの名無しさん:2013/01/29(火) 16:10:50.39
>>873
VBAでプログラミングしたことほとんどないんでしょ?
白状しちゃいなよ。

875 :デフォルトの名無しさん:2013/01/29(火) 16:17:03.80
>>874
まっ、基本的にVBScriptしか使わないけどな
取りあえず、俺にわかるように、型宣言する意味を教えてちょーだい

とりあえず、グローバルで変数使うとか馬鹿な事は言うなよ...

876 :デフォルトの名無しさん:2013/01/29(火) 16:18:22.98
>>842
「宣言と使用箇所の距離」じゃなくて「初期化と使用箇所の距離」でしょ。
宣言は初期化じゃないw

877 :デフォルトの名無しさん:2013/01/29(火) 16:22:10.86
>>857
あくまでお前の推測でしょw

878 :デフォルトの名無しさん:2013/01/29(火) 16:26:28.34
>>877
君は、説明も出来ないのに「明示的に型を宣言すべき」と言うのかい?

879 :デフォルトの名無しさん:2013/01/29(火) 16:31:17.49
>>875
> 取りあえず、俺にわかるように、型宣言する意味を教えてちょーだい

・型違いに起因するバグを減らせる
・読み手に与える情報を増やせる
・インテリセンス

>>876
宣言も近い方が良いって書かれてるよ。>>805のリンク先読んで。

880 :デフォルトの名無しさん:2013/01/29(火) 16:42:47.58
>>879
・無駄に大きな関数を作らない限り、型の違いによるバグは起きない
・判りやすい変数名をつけるだけで対応可能

結局、問題点はインテリセンスが効かないだけじゃん

881 :デフォルトの名無しさん:2013/01/29(火) 16:45:52.32
>>880
> ・無駄に大きな関数を作らない限り、型の違いによるバグは起きない
> ・判りやすい変数名をつけるだけで対応可能

だったら、Option Explicitもいらないよね。

882 :デフォルトの名無しさん:2013/01/29(火) 16:47:12.65
>>881
馬鹿じゃね?
Option Explicitは要るだろw

883 :デフォルトの名無しさん:2013/01/29(火) 16:48:32.92
>842
すぐって、少なくとも実行もしくはコンパイルするまではエラーにならないけど
書き換えたfugaもどっかで使ってたらまたエラーになるわけで
実行するまでエラーかどうかわからんようなコーディングするのかお前は

>変数の有効範囲を狭く
VBAではこれができないから言ってんだよ
VBAの変数はプロシジャ内のどこで宣言されようがそのプロシジャ全体のスコープ
VB.Netの例のようにIfブロック内でスコープ閉じるならそこで宣言すればいい

884 :デフォルトの名無しさん:2013/01/29(火) 16:51:25.46
>>880
VBAのベストプラクティス/Good Partsをどうしようかって話だから、個人の資質で防げることを超えた物を考えようよ。

> Dim w as worksheet

このwの活性範囲が十分に狭いなら、w一文字でもいいよね。
わざわざDim myWorkSheetとかしなくてもいい。

無駄に大きな関数を作らないのも、わかりやすい変数名にするのもGood Partsだけど、それに加えて
変数宣言時に型を明示しましょうというのもGood Partsだよねという話。

型明示するだけでさまざまなメリットを享受できるのに、なんで型明示したくないの?

885 :デフォルトの名無しさん:2013/01/29(火) 16:53:38.21
880
あのさあ
エラー起きないように努力するのとは当然だし
エラー起きたときの復旧、メンテ労力下げるように用意するのも当たり前
見えない、見ない、見なかったことにしてるだけじゃん

バグとエラー使い分けられないの見ても判るよ
見えなきゃ不具合は存在しないとでも思ってるんじゃないか

886 :デフォルトの名無しさん:2013/01/29(火) 16:57:12.00
>>883
> >変数の有効範囲を狭く
> VBAではこれができないから言ってんだよ
> VBAの変数はプロシジャ内のどこで宣言されようがそのプロシジャ全体のスコープ

何かの言語とごっちゃになってるよ。
VBAでは、変数宣言するまでは、同一スコープではその変数は使えないよ。

887 :デフォルトの名無しさん:2013/01/29(火) 16:59:27.38
ぷ……Public

888 :デフォルトの名無しさん:2013/01/29(火) 16:59:44.56
今VB6でも確かめたけど、VB6も変数を宣言するまでは、その変数は使えない。

889 :デフォルトの名無しさん:2013/01/29(火) 17:05:53.64
>>884
ふぅ、Dimのみで見れば
Dim w as worksheet

Dim w
では違うように見えるが...
結局は、setでワークシートオブジェクトを関連付けなければならないのだから、活性範囲が十分に狭いという条件では、明示的に型を宣言しようがしまいがどちらも同じだろ

メリットとしてあるのは、インテリセンスが効くか効かないかだけ
その唯一残ったメリットも、COM経由でEXCELを利用する時には意味はなくなるし

890 :デフォルトの名無しさん:2013/01/29(火) 17:08:26.99
>>889
いろいろごっちゃにしないでくれるかな。
> 活性範囲が十分に狭いという条件では、明示的に型を宣言しようがしまいがどちらも同じだろ

活性範囲が十分に狭ければ、通常はお勧めできない一文字変数でも良い場合もあるということ。
setを使うかどうかは関係無い。

> メリットとしてあるのは、インテリセンスが効くか効かないかだけ

・型違いに起因するバグを減らせる
・読み手に与える情報を増やせる

は無視ですか。

> その唯一残ったメリットも、COM経由でEXCELを利用する時には意味はなくなるし

まぁ、Excel使い以外はどうでもいいことでしょうね。

891 :デフォルトの名無しさん:2013/01/29(火) 17:09:04.57
>>885
メンテw
関数やサブルーチンの引数には、型宣言は必要だと言ってるのですがw

892 :デフォルトの名無しさん:2013/01/29(火) 17:10:06.31
ところで、>>805のリンク先のCode Completeの内容にも全然共感できないということなの?

893 :デフォルトの名無しさん:2013/01/29(火) 17:10:15.15
>>886
それは変数の寿命の問題
(変数名の)有効範囲の問題じゃない

894 :デフォルトの名無しさん:2013/01/29(火) 17:10:44.31
> VBAではこれができないから言ってんだよ

あー、これはやっちゃいましたね。
ド素人丸出しw

895 :デフォルトの名無しさん:2013/01/29(火) 17:14:02.54
>>893
Public Sub Foo()
 Dim w as worksheet
 (・・・十行・・・)

 dim r as range
 (・・・十行・・・)
End Sub

このrの有効範囲は、下十行に限定される。
関数先頭で宣言するより、必要になった場所で宣言しましょうってことだよ。

896 :デフォルトの名無しさん:2013/01/29(火) 17:22:17.88
>>895
>このrの有効範囲は、下十行に限定される。
されない。dim rより上でもrを宣言できない=下のdimと同一スコープ内だから2重宣言
限定するようにプログラミングするべきではあるが、言語仕様として限定されない

897 :デフォルトの名無しさん:2013/01/29(火) 17:25:27.84
変数を使用する直前で宣言して、使用したあとすぐにスコープから外れるんなら
変数の宣言を直前にやってもいいと思う。
ただし、使用後に処理が続く場合は意味ないんだけどw

>>842のようにIfステートメント内で変数宣言してもIfステートメント抜けてもfugaは使えるわけで。
誰かがメンテナンスの時にその変数使ってしまうことも考えられるわけで。
使用する直前に初期化するのは理解できるけど、使用する直前に宣言するメリットがわからない。

898 :デフォルトの名無しさん:2013/01/29(火) 17:28:02.57
>>896
使用できるかどうかと、同一名称の変数を宣言できるかどうかは別問題だよ。
有効範囲という言葉が気に入らないなら、使用可能範囲と言ってもいい。

ちなみに、俺がこれまでに言ってきたことは、俺が独自で考え出したことじゃないよ。
プログラミング一般に広く広まっている概念。
Code Compleもそうだし、たとえばここでもそう言われている。
http://www.ibm.com/developerworks/jp/java/library/j-noaccent.html

VBAもそうできるんだからそうしましょうよってことなんだがなぁ。
だんだん疲れてきたぞ。

899 :デフォルトの名無しさん:2013/01/29(火) 17:30:51.64
>>897
> 使用する直前に初期化するのは理解できるけど、使用する直前に宣言するメリットがわからない。

宣言と初期化を同一行で書ける言語(定義できる言語)はそうした方がいいし、
できない場合でも、宣言はできるだけ使用する直前でやった方が良い。

・・・というのがCode Completeや>>898のリンク先で書かれてること。

900 :デフォルトの名無しさん:2013/01/29(火) 17:34:23.05
>>890
型違いに起因するバグが何故起きるのかの説明が必要だな
次に、変数が何をするものなのかは、変数の初期化によって明らかにするべきであって、変数の宣言で行う事ではない

VB系の言語の場合、変数の型宣言は型宣言が必要な場合にのみ行うように作られているってのを忘れてはならない

901 :デフォルトの名無しさん:2013/01/29(火) 17:38:04.09
だから、それらの考え方の基本はなるべくスコープを狭く、だ
たとえばそこには、変数はループの内側に入れること って言うのがある
これはループ内で宣言した変数がループ内のみでしか使えないって前提なんだよ
だがVBAではどこで宣言しようが、そのプロシジャ全てでその名前が有効になるんだよ
(使えるのは宣言より後ろだとしても)
つまりループの後でループ内宣言の変数を使える
それではループ内で宣言する意義がうすいんだよ

902 :デフォルトの名無しさん:2013/01/29(火) 17:38:09.91
>>900
> 次に、変数が何をするものなのかは、変数の初期化によって明らかにするべきであって、変数の宣言で行う事ではない

型を明示すれば、何をするかはわからずとも、何を扱うかは明確になるよね。

> VB系の言語の場合、変数の型宣言は型宣言が必要な場合にのみ行うように作られているってのを忘れてはならない

Option Explicitなしでもいいけど、Option Explicitで変数宣言を強制して、なおかつ型を明示するのが
ベストプラクティスだよって話なんだが。

で、なんで型を明示したくないの?

903 :デフォルトの名無しさん:2013/01/29(火) 17:40:52.28
>>901
> (使えるのは宣言より後ろだとしても)

それが重要なんだけど。
declarationするまでは、その変数は使いませんというプログラマの意図の明示。

904 :デフォルトの名無しさん:2013/01/29(火) 17:44:56.44
二重定義に関しては、C99でも同じだよ。
同一スコープでは二重定義できないけど、やっぱり宣言(定義)以降じゃ無いと使えないのはVBAと同じ。

そういう制限があるから、K&Rみたく関数の先頭で全部宣言しましょうとはならない。
というか、そうしたくないからC99でスコープの途中で宣言できるようになった。

905 :デフォルトの名無しさん:2013/01/29(火) 17:45:44.27
>>903
そんな話初めて聞いたしw
完全に後出し。
いい加減にしろ。

906 :デフォルトの名無しさん:2013/01/29(火) 17:47:58.02
>>904
Option Explicit書かなかったら使えるでしょ。
途中でバグる可能性あるけどw

907 :デフォルトの名無しさん:2013/01/29(火) 17:49:11.12
なんか議論にもなってないんだけど

変数の宣言
dim 変数

変数の型宣言
変数 as 型

一行での変数の宣言および型宣言
dim 変数 as 型

で,変数の宣言は明示すべきだ!って人と,変数の型宣言は明示すべきだ!ってのがごっちゃになってる人いないか?

>>888

いまさら突っ込むけど,変数宣言の強制が初期設定で行われるのはdotNetからな
VBもVBAも自分で変数宣言強制オプション指定する必要がある
・・・確かそんな気がした

>>891

・・・ごめん,君がなに言ってるのかちょっとわかんない
いや,>>891自体は理解できるんだけど,なんで>>891のレスになってるのかが理解できない
会話はキャッチボールしようぜ,なんで一人でゴルフしてんだよ,連続性がないww

908 :デフォルトの名無しさん:2013/01/29(火) 17:51:48.21
>>905
> そんな話初めて聞いたしw
> 完全に後出し。

>>805のリンク先を読んで貰えればわかると思ったんだが、わかってなかったんならそれはすまない。

さて、それがわかったところで、変数宣言は使用箇所の直前でやったほうが良いということには賛成?反対?

909 :デフォルトの名無しさん:2013/01/29(火) 17:52:45.30
>>904
C99のスコープはプロシジャ単位ですか?
ブロック中で宣言された変数はブロックを抜けたあとでも有効ですか?

ブロック内でスコープ閉じる言語なら先頭でまとめて宣言しろなんて言わんわ

910 :デフォルトの名無しさん:2013/01/29(火) 17:53:29.50
>>907
> いまさら突っ込むけど,変数宣言の強制が初期設定で行われるのはdotNetからな
> VBもVBAも自分で変数宣言強制オプション指定する必要がある
> ・・・確かそんな気がした

これも明確にしてなかったけど、Option Explicitは当然としての話ね。
変数宣言が強制されるとして、さて、変数宣言はどこで行うのがいいのかねって話。

911 :デフォルトの名無しさん:2013/01/29(火) 17:53:58.22
・・・で
誰がパイパイで誰がパイパンなの?
いい加減自演くさい

912 :デフォルトの名無しさん:2013/01/29(火) 17:55:55.85
残念。ここまで俺の自演

913 :デフォルトの名無しさん:2013/01/29(火) 17:57:38.78
>>909
> C99のスコープはプロシジャ単位ですか?

C99の話は、変数宣言箇所以前でも、同一スコープ内では同名の変数は宣言できないよってことの例。

> ブロック内でスコープ閉じる言語なら先頭でまとめて宣言しろなんて言わんわ

>>895のコードは、Sub内がすべて同一スコープだけど、それでもrはあの位置で行いましょうねってこと。

914 :デフォルトの名無しさん:2013/01/29(火) 17:57:53.62
変数の宣言と、型の宣言が区別できず
スコープの意味が判ってない奴が、大声で喚き散らしているからどうにもならん

・変数の宣言は必要だが、型の宣言は必ずしも必要ではない
・VB系の言語でスコープを使い分けたい場合は、一々関数かサブルーチンとして別ける必要がある

915 :デフォルトの名無しさん:2013/01/29(火) 18:01:09.21
> ・変数の宣言は必要だが、型の宣言は必ずしも必要ではない

それはその通りだが、型を明示した方がいいよって話を延々としてるんですが。
型を明示することに大いなるデメリットがあるなら「それはするな」と言うし。

916 :デフォルトの名無しさん:2013/01/29(火) 18:03:09.17
>>914
> ・VB系の言語でスコープを使い分けたい場合は、一々関数かサブルーチンとして別ける必要がある

スコープを使い分ける話をしたいわけではなく、同一スコープ内のどこでも変数を宣言できるVBAでは
(正確には、使用する前までだが)、どこで宣言しましょうねって話だよ。

917 :デフォルトの名無しさん:2013/01/29(火) 18:04:03.37
>>915
そこを論点にしてるのはお前だけだ
型を明示しない方が良いって言ってるやつは多分一人だけだ
大多数は変数の宣言と宣言時の型指定については納得してる

論点は宣言(と初期化)のタイミング
まあ、ほとんど宗教論。コーディングスタイルの違い

918 :デフォルトの名無しさん:2013/01/29(火) 18:05:41.18
>>840のIf 条件2ブロックが、その外側と別スコープにならないのはその通り。
だからといって、じゃあ変数は関数の先頭でまとめてやるのが良いかというと、それは別の話だよね。

919 :デフォルトの名無しさん:2013/01/29(火) 18:07:49.79
>>917
> そこを論点にしてるのはお前だけだ
> 型を明示しない方が良いって言ってるやつは多分一人だけだ
> 大多数は変数の宣言と宣言時の型指定については納得してる

あ、そうなの?
複数人を相手してるのに気づかなかったよ。

> 論点は宣言(と初期化)のタイミング
> まあ、ほとんど宗教論。コーディングスタイルの違い

俺の意見は、宗教論ではなく明確な理由でよりよい方というのが選択できるというもの。
それはCode Completeなんかで詳しく説明されてる。

920 :デフォルトの名無しさん:2013/01/29(火) 18:08:59.81
わかったわかった,俺がまとめてやるよ

・うんこするのだけが必要で他はまったくいらない派

うんこするのと,うんこした後紙で拭くことを区別できないやついるよな
うんこは必要だけど,うんこした後紙で拭くのは必ずしも必要ないだろjk

・うんこするのは当然必要だけど,おしり拭いたほうがいいよ派

うんこが必要なのはそうだけど,うんこした後紙で拭いたほうがいいよ
紙で拭いたら死ぬとかならしょうがないけどさ

・うんこするのは当然必要だけど,おしりのことも考えてやれよ派

うんこした後ふくのはいいんだけどさ,紙でふくんじゃなくて,ウォッシュレット使ってから紙で拭けばいいんじゃね?
二度手間になるけど清潔じゃん!

・うんこしないよ派

うんこするって冒頭で宣言しなけりゃいいじゃん

921 :デフォルトの名無しさん:2013/01/29(火) 18:10:18.44
よし。俺の指針

変数はスコープの最初で宣言する
だたし、スコープが充分狭い場合は使用(初期化)する直前でもよい
初期化は使用する直前に行う

異論は認める

922 :デフォルトの名無しさん:2013/01/29(火) 18:12:06.91
>>920
もっとお母さんみたいに言ってくれ

923 :デフォルトの名無しさん:2013/01/29(火) 18:12:19.20
>>898のリンク先の説明を引用すると

(以下のこのスタイルというのは、K&Rで関数先頭に固めて変数定義する方法)

> その一方、このスタイルにはいくつものマイナス面があります。まず、変数の宣言と変数の使用が
> 切り離されるため、コードを追うのが少し大変になります。さらに、1 つのローカル変数が、おそらく
> 無意識に異なる用途で再利用される可能性がかなり高くなります。この場合、変数にそのまま値が
> 残され、その値がコードの期待していた値でなければ、予期せぬバグが発生してしまいます。この
> ような変数の再利用と、C での短く不可解な変数名という傾向を併せて考えれば、大惨事の原因と
>なることは明白です。
>
> Java 言語では (そして C の最近のバージョンでも)、変数は最初にそれを使用する箇所、あるいは
> その近くで宣言することができます。この宣言方法を実践して Java コードを作成すれば、コードは
> より安全になり、バグが発生しにくくなり、そして読みやすくなります。

というのに完全に同意できるんだよね。

Code Completeでも同じようなことが書かれてるんだけど、これに同意できない人が何故同意できないのか
その理由が知りたいんだよ。

924 :デフォルトの名無しさん:2013/01/29(火) 18:14:45.50
>>921
スコープが長い時の方が使用する直前で宣言するメリットがでかいだろ

925 :デフォルトの名無しさん:2013/01/29(火) 18:14:46.92
>>923
ここはム板でかつ「Excel」VBAスレだから
マ板いけ

926 :デフォルトの名無しさん:2013/01/29(火) 18:16:35.06
だから、ブロックスコープ可能な言語とそうじゃない言語をいっしょくたにされてもなぁ

927 :デフォルトの名無しさん:2013/01/29(火) 18:19:24.72
>>925
わかった。もうやめるわ。

928 :デフォルトの名無しさん:2013/01/29(火) 18:19:37.53
むせる

929 :デフォルトの名無しさん:2013/01/29(火) 18:20:43.89
逃げたw

930 :デフォルトの名無しさん:2013/01/29(火) 18:23:54.42
>>923
>Java 言語では (そして C の最近のバージョンでも)、
VBAはJava言語でも最新のCでもないから
>変数は最初にそれを使用する箇所、あるいは
> その近くで宣言することができます。
には該当しないのですね。わかりました

931 :デフォルトの名無しさん:2013/01/29(火) 18:25:40.77
こんな本職プログラマがうろついているようなスレに居られるか!
俺は一人でマ板に帰るぞ!

932 :デフォルトの名無しさん:2013/01/29(火) 18:28:10.58
>>926
>>930
禿同。

933 :デフォルトの名無しさん:2013/01/29(火) 19:42:36.94
Dim i
For i = 0 to 10
'何かの処理1
Next

Dim i
For i = 0 to 10
'何かの処理2
Next

これが通るかどうかを考えれば、変数の宣言位置は決まるだろ?

934 :デフォルトの名無しさん:2013/01/29(火) 20:14:53.71
9時から5時までの間に書き込んでいる連中は無職
ここは無職のたまり場

935 :桃白白:2013/01/29(火) 20:18:38.92
>>934
仕事くれ

936 :デフォルトの名無しさん:2013/01/29(火) 20:31:18.20
>>934
つ生保

937 :デフォルトの名無しさん:2013/01/29(火) 20:31:22.56
>>934
在宅勤務なのですが何か?w

938 :デフォルトの名無しさん:2013/01/29(火) 20:32:29.91
>>937
年収300万円以下の底辺は無職と同じ

939 :デフォルトの名無しさん:2013/01/29(火) 20:32:34.45
>>935
gdgdになってるようだけど結局どうなのよ?

940 :デフォルトの名無しさん:2013/01/29(火) 20:51:56.84
>>937
カマかけたら釣れたw

941 :デフォルトの名無しさん:2013/01/29(火) 21:00:02.05
カマでかけるとか嫌アッらしい・・・

942 :デフォルトの名無しさん:2013/01/29(火) 23:04:53.74
ニートの俺は逆に9時5時には書かないけどな

943 :デフォルトの名無しさん:2013/01/29(火) 23:09:11.22
このスレは
まるで不毛な
会議室
そろそろ次スレ
建てていいかも

944 :デフォルトの名無しさん:2013/01/29(火) 23:51:19.88
デバッグコンソールの召還!!
Ctrl + g !!
チュウィンッッ

945 :デフォルトの名無しさん:2013/01/29(火) 23:57:13.36
Dim CountA As Interger: Dim CountB As Integer: Dim CountC As Integer
Dim WorkS As String:   Dim WorkV As Variant: Dim WorkO As Object

946 :デフォルトの名無しさん:2013/01/30(水) 00:01:43.82
職場でVBAを使いまくってたら
Excelがものすごく重くなるんですけど
これの原因と対策はなんでしょうか?
もちろん朝AM9に来てすぐにExcelは起動し、ずっと帰宅のPM6までExcelは起動しっぱなしです。

947 :デフォルトの名無しさん:2013/01/30(水) 00:07:21.10
>>946
原因は不明
対策はモニターを叩き割る
モニターを地面に叩き付けて踏み付けて
応援してる

948 :デフォルトの名無しさん:2013/01/30(水) 01:15:16.71
VBEはインデントを勝手に詰めるのが嫌
>>945みたいにスペースを空けて揃えることができない

949 :桃白白:2013/01/30(水) 04:15:54.92
>>946
VBAで変なことやってんじゃないの?まじめに仕事しろ。

950 :デフォルトの名無しさん:2013/01/30(水) 05:07:19.57
You、メモリを解き放っちゃえよ(と言ってみたいだけ
Application.MemoryTotalでちろちろ確認してみなよ

エンジニアなら原因を一つ一つ検討して潰すことを面倒がるな
足りないのがメモリかCPUかはっきりさせること。
メモリが足りないならExcelが使える分を増やし、
CPUのパワーが足りないなら(あまり考えられない)上司にねだれ。

ワークシートのつくりを軽くすること、データをメモリ上で処理して
余計な操作や無駄なループをなくすこと。

自分のPCでどれだけのワークブックなら重くなるか
いっぺん実験してみればいいじゃん。
一枚目のシートにVBAで65536×256(2003までの場合)データを
ランダムに入れ、二枚目以降でデータをif文で評価する数式を敷き詰める。
シートの枚数増やすたびに再計算して、かかった時間をDebug.Print。

951 :デフォルトの名無しさん:2013/01/30(水) 12:33:34.83
わざわざ型を宣言するってどんだけショボいプログラムだよ
もう少し勉強してからにしろよ

952 :デフォルトの名無しさん:2013/01/30(水) 12:54:16.80
いつまでやってんだ

953 :デフォルトの名無しさん:2013/01/30(水) 13:12:47.46
いつまでVBAとかしょぼいもん使ってんだよ
時代はExcelDNAだ
http://exceldna.codeplex.com/

954 :デフォルトの名無しさん:2013/01/30(水) 15:10:28.86
C#でcomつくってやるのと比較してどうなんでしょ。
素人さんに使ってもらう為に配布するにはかんたんだけどなあ。

955 :デフォルトの名無しさん:2013/01/30(水) 15:16:30.29
>>953
終ってるどころか始まりもしなかったものに、いつまで固執してるんだ?w

956 :デフォルトの名無しさん:2013/01/30(水) 20:23:56.68
ちんことまんこのドッキング

957 :デフォルトの名無しさん:2013/01/31(木) 00:46:26.29
ちんことかまんことか言ってる奴って馬鹿なの?
だったら俺のまんこにドッキングしてみろよ

958 :デフォルトの名無しさん:2013/01/31(木) 02:16:47.51
>>957 は菊穴処女

959 :デフォルトの名無しさん:2013/01/31(木) 09:14:16.71
エクセルVBA初心者なので教えて下さい。

例えば10月15日を基準にして、10月1日〜15日で有給を1日消化、10月16日〜30日
までに有給を1日消化したと仮定した場合、
15日までの1日を10から引き、16日からの1日を4から引きたい場合、
どういうプログラムにしたらいいでしょうか。

何分初心者なので、宜しくお願い致します。

960 :デフォルトの名無しさん:2013/01/31(木) 09:32:08.12
>>959
a = (10 - 1) + (4 - 1)

961 :デフォルトの名無しさん:2013/01/31(木) 09:38:53.75
白桃、客が来たぞ。>>959

962 :デフォルトの名無しさん:2013/01/31(木) 09:40:39.42
パイパンは日本語も得意だろ。
併せて教えてやれよ。

963 :デフォルトの名無しさん:2013/01/31(木) 09:44:39.24
前半と後半で変数別に用意すりゃいい
日付が15以前なら前半から、それより後なら後半から
減算すれば
後で使うんだったら月ごとにデータ貯めて、最後に計算すりゃいい

964 :デフォルトの名無しさん:2013/01/31(木) 11:23:11.62
>>959
プログラムってのはお前のやりたい事をコンピュータ向けの言語で書くことなんだが
お前のやりたいことはお前にしかわからないから、せめてやりたい事ぐらい伝わるように書け

お前が上げた日付や数字はどっからもってきて、最終的にどういう結果をどう出力したいんだ?

965 :デフォルトの名無しさん:2013/01/31(木) 11:46:34.16
だれか>>954の疑問に答えてあげて!

966 :デフォルトの名無しさん:2013/01/31(木) 11:52:35.05
>>965
そもそも質問になっていない。
ただのつぶやきレベル。

比較してどうなんでしょって言うけど
何をどういう観点で比較したいの?
それは自分で比較できないことなの?

人としてもっとまともな会話をしようよ。

967 :デフォルトの名無しさん:2013/01/31(木) 11:57:04.13
>>966

968 :デフォルトの名無しさん:2013/01/31(木) 12:59:29.59
>>966
多分、お前がこのスレの癌だ

969 :デフォルトの名無しさん:2013/01/31(木) 13:10:50.12
ガーン

970 :デフォルトの名無しさん:2013/01/31(木) 13:45:56.79
Excel VBA 質問スレ Part28
http://toro.2ch.net/test/read.cgi/tech/1359607536/

971 :デフォルトの名無しさん:2013/01/31(木) 13:50:10.85
>>966
ゆとり丸出しだな
何をどうやって比較しろと言われないと、何もできないのか

972 :デフォルトの名無しさん:2013/01/31(木) 14:05:19.92
>>966はわかってないから評価も比較もできないんだよw
かんべんしてやってくれ(笑)

973 :デフォルトの名無しさん:2013/01/31(木) 14:17:22.82
>>967-968,971-972
必死すぎw

974 :デフォルトの名無しさん:2013/01/31(木) 14:23:14.96
話題が無いんだ
かんべんしてやってくれ(笑)

975 :デフォルトの名無しさん:2013/01/31(木) 14:24:25.09
>>971
そりゃそうだろ
C#でcom作ってどうたらという話が
VBAと何の関係があるのか、俺にはさっぱりわからん。
お前にはわかるのか?だったら答えてやれよ。

976 :デフォルトの名無しさん:2013/01/31(木) 14:38:08.68
>>975
わからないんだったら
黙ってろ、糞が

977 :デフォルトの名無しさん:2013/01/31(木) 14:39:05.06
>>976
それを言うのならお前が答えればいい。

978 :デフォルトの名無しさん:2013/01/31(木) 14:45:28.55
俺はわからん。お前もわからんよな?わからなくて当然だよな?
承認してくれ
承認してくれ
承認してくれ
承認してくれ
承認してくれ

979 :デフォルトの名無しさん:2013/01/31(木) 14:48:12.66
>>977
なあ、お前論文書いたことある?

980 :デフォルトの名無しさん:2013/01/31(木) 14:52:04.05
>>975
C#でCOMを作ってVBAを拡張するのと、Excel-DNAを使ってコードを作るのとでは、いろんな面でどうなんでしょうねってことでしょ。
いろんな面というのは、開発効率とか、ユーザの利便性とか、メンテナンス性とか、将来性とか、セキュリティ面とか、いくらでもある。
その中で何かを語りたいなら語ればいいじゃんってことでしょ。

俺は興味無いけど。

981 :デフォルトの名無しさん:2013/01/31(木) 14:53:08.20
ああ、あとはパフォーマンス的にどうなよのってのもあるわな。

982 :デフォルトの名無しさん:2013/01/31(木) 14:55:13.81
あ、ちなみに俺はC++でDLLを作る派なんで。

983 :デフォルトの名無しさん:2013/01/31(木) 15:03:43.74
>>980
自演じゃないとわからんレベルだなw

984 :デフォルトの名無しさん:2013/01/31(木) 15:07:03.18
>>983
ということにしたいんですね。

うざいわ、お前。

985 :デフォルトの名無しさん:2013/01/31(木) 15:22:11.26
なんでcom作るん?

986 :桃白白:2013/01/31(木) 16:29:35.22
>>961
http://i.imgur.com/cQ8pGlF.png

987 :デフォルトの名無しさん:2013/01/31(木) 20:08:57.57
うめ

988 :デフォルトの名無しさん:2013/01/31(木) 20:23:35.92
>>985
com作るはcom使うの間違いじゃないかと思うんだが

>>980
俺の解釈ではC#でCOM経由でEXCELを拡張するのと、VBAでEXCELを拡張するのと
比較してどうだろう、って話じゃないかと

俺も興味ないけど

989 :デフォルトの名無しさん:2013/01/31(木) 21:01:22.63
>>988
いつまで話続ける気だ、ヴォケ

990 :デフォルトの名無しさん:2013/01/31(木) 21:11:13.33
>>989
1000行くまでだ、ヴァカ

991 :デフォルトの名無しさん:2013/01/31(木) 22:14:41.40
>>986
それカリン様w

992 :デフォルトの名無しさん:2013/01/31(木) 23:02:52.46
ちょっとややこしいことするなら、C# の方がライブラリが色々揃ってて樂なんだけど、
COM 使うには using とかでちゃんと解放 (Dispose) しないとはまるから、意外と気を使う。

なので、ちょっとした用途なら Excel VBA のほうが樂。

ていうか、Visual C# for Application 作ってくれよ… > MS

993 :デフォルトの名無しさん:2013/01/31(木) 23:37:42.51
逆にC#でCOM作ってVBAから呼ぶとかもあるよ

994 :デフォルトの名無しさん:2013/02/01(金) 00:02:20.80
>>993
以前、プリンタポートを汎用ポートとして使用できるDLLがトランジスタ技術の付録で付いてきていて、
VBAからそのDLLをコールして測定システムを組んだことがある。
実験結果の記録もVBAで出来るからかなり効率よく仕事ができた。

995 :デフォルトの名無しさん:2013/02/01(金) 00:35:41.68
プリンタポートは衰退しました

996 :デフォルトの名無しさん:2013/02/01(金) 02:50:16.97
プリンタポートなんてない。パラレルポートだ

997 :デフォルトの名無しさん:2013/02/01(金) 03:02:34.47
セントロニクス、IEEE1284

998 :デフォルトの名無しさん:2013/02/01(金) 05:20:33.12
セントロ

999 :デフォルトの名無しさん:2013/02/01(金) 05:21:55.11
次スレ
Excel VBA 質問スレ Part28
http://toro.2ch.net/test/read.cgi/tech/1359607536/

1000 :1000: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          \)

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

268 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)