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


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

Excel VBA 質問スレ Part15



1 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:07:19 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/
13 pc12.2ch.net/test/read.cgi/tech/1254281104/
14 pc12.2ch.net/test/read.cgi/tech/1262748898/ ←New!

関連スレ
Excel総合相談所 91
pc11.2ch.net/test/read.cgi/bsoft/1270542226/
Word総合相談所
pc11.2ch.net/test/read.cgi/bsoft/1263719084/
【質問不可】Excel総合相談所スレの雑談・議論スレ2
pc11.2ch.net/test/read.cgi/bsoft/1151651536/

72 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:07:34 ]
>>70
条件が「取り扱いに困るほど大きい」では計算ができません。
いくつ以下、と具体的な数字で示して下さい。

73 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:15:59 ]
>>67-69
Mid statementを使えば、For i=1 To Len(s)/2でできるだろ

74 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:20:17 ]
>>70
10足分入るカートンと、12足分入るカートンの2種類があって
最適な組み合わせを調べたいってこと?

75 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:22:28 ]
>>72
商品によって変わるので一概に言えません。
(例としては靴の場合で10-20足入としました)
とりあえず変数で示して頂ければ幸いです。

実務上では品目ごとにを許容範囲を設定し、参照する形にしたいと思います。

76 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:30:54 ]
>>74
全数を最小の種類のカートンで出荷するには、何足入と何足入のカートンを用意すればいいのか? 
ということを調べたいのです。

例では、
10足入の場合は、他に12足入と18足入の合計3種類カートンを作らなくてならないのに対し、
12足入では12足入と10足入の2種類で済むので効率的です。

実際は取引先も扱い商品も多数あり、いちいち考えるのが大変なので、
自動で最適結果を出したいと思っています。

77 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:51:37 ]
素因数分解と最大公約数がミソだが
カートン候補がありすぎるとプログラムも大変だな


78 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:06:33 ]
まず4C2で6通りの最大公約数を求める
@ この6つの公約数を見比べて、標準カートン10前後の奴の数が多い奴で1つ確定
30とか40とか大きくなったら10にするような処理が必要
それでまず2店舗〜4店舗が確定

残りの2店舗で割り切れない場合
A その2店舗の最大公約数があればそれでもう1種確定

それがなければ
B @の確定カートンで割った余りを求め、その余り2つに公約数があれば確定

それもなければ
C Bの商から1減らしてあまりを求め(つか、さっきの余りに@をプラスして)、その2つに公約数があれば確定

@で、標準カートンに近いものがない場合(2とか3とかにしかならない)
強引にカートンを10にしてしまいBから以下を4店舗分繰り返す


79 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:10:07 ]
仰るとおり、因数分解と公約数だな、と思ったのですが、
これが中々難しくて・・・

アタマが痛くなってきてしまいましたw

80 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:16:31 ]
店舗Eの発注が9足だった場合、許容範囲を9〜に下げて
そして9個いりのカートンは使うってことなのかな?



81 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:24:02 ]
力づくで計算したらいいのに
For K=カートン最小値 To カートン最大値
S=必要数(K)
If S > 暫定必要数 Then S = 暫定必要数
Next

82 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:32:03 ]
>>80
1つ違うくらいならそうしたいですが、大幅に違う場合は例外として扱うことになると思います。
(1000-5000個が適用範囲の商品に、15個の発注が来た場合など)

ただ、実際にはあまり少量のオーダーは受けないので無視して良い事例かと思います。

>>78
ちょっとイメージできないので考えさせてください・・


皆さんありがとうございますm(_ _)m

83 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:38:46 ]
VBAに関係ないことになると嬉々としてレスする奴がいるよな

84 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:39:33 ]
単純に
下1桁が2の倍数なら、12カートンを(1桁/2)個用意すれば、残りは10カートンで済む
どうせ奇数はないんでしょ?あっても繰り上げすれば済む

結論
全て12と10のカートンでおk

85 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:02:46 ]
>>84
すみません。カートン総数も減らしたいので出来るだけ多くパッキングしたカートンを基本にしたいのです。
書いてなかったですね。申し訳ない。
奇数もありますが、ご指摘のとおり繰上げ処理でも問題ないです。

なんかスレ違いな気がしてきたので、もうちょっと考えてみますねw

スレ汚し失礼しましたm(_ _)m

86 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:04:14 ]

この書き込みの意図がわかりません

87 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:32:08 ]
端数を切り上げてもいいんなら、12個入りのカートン1種類だけでいいじゃん
なんか条件が曖昧すぎるよ
コンピューターのプログラムってのは、もっと厳密に数字が決まってなきゃ作れないんだよ
条件が色々あるんなら、そのすべてをリストアップするか、法則を決める必要がある

88 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:38:18 ]
1カートン1個なら端数は出ないし1種類で済む

それでは困る場合は、「1カートンは最低でも何個以上にするか」「カートンは何種類以下に抑えたいか」
「端数がいくつまでなら切り上げ可能か」のような数字を商品ごとにすべて決めてデータベース化しないと。

89 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:00:49 ]
>>85
商品別にカートンと個の間に、もう1つ数量の単位(組とか)を設定する。
上記例の靴だったら2個=1組
適用範囲1000〜5000個のものだったら200個=1組 みたいなかんじ。
組数以下の端数は1組として切り上げる。

こういう設定でできないかな?

90 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:28:59 ]
エクセルが高くて買えないんですけど、タダで勉強するにはどうすればいいんでしょうか?



91 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:32:01 ]
>>90
openoffice

92 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:32:38 ]
>>90
ttp://msdn.microsoft.com/ja-jp/library/bb386107(v=VS.100).aspx

93 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:33:43 ]
体験版
www.forest.impress.co.jp/article/2006/12/12/msoffice2007trial.html

94 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:43:39 ]
勉強するだけなら買わなくてもいいだろ
ネットの解説サイトを見て回ってればいい
実際に使いたいなら>>91-93

95 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 22:15:02 ]
どうもありがとうございます!
タダでずっと使えそうなOPENOFFICEで頑張りたいと思います

96 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 23:48:31 ]
コードを"ゴリゴリ書く"ってよく言うけど、
これってVBAにも当てはまると思う?

Cやアセンブラならゴリゴリが似合うけど、
VBAならベタベタとか、ポロポロとかの方が
似合う気がするんだけど。

97 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 03:52:47 ]
>>96
ゴリゴリ書くって表現は、処理の根幹部分で既存のライブラリに頼らないとか、
規模が大きかったり開発期間が短い場合に使うものだから、言語の違いは直接は関係ない。

けど、VBAはOfficeの特定の作業を自動化するのが目的の言語だから、
関数を数個書いて終わるケースが大半を占める。「ゴリゴリ書く」ことも少ないだろうね。

たまに大規模なアプリをVBAで作っちゃう人もいるけど、それはVBを使った場合にくらべて
開発効率や処理効率が悪いことがほとんど。

98 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 04:04:01 ]
すべてのヘルプを読んでから質問するように

99 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 07:06:09 ]
VBA初心者です
この言語にはポインタみたいなのはないんでしょうか?
リンクリストとかのデータ構造はどうやって実装しているんですか?

100 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 07:42:43 ]
>>99
ポインタ型はありません。
リスト構造も標準では用意されていないので、実装はプログラマー依存です。
単なる整数型のインデックスと配列の組み合わせで実現することが多いと思います。



101 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 09:46:20 ]
>>97
どうもありがとう。
ゴリゴリってそういう意味があったんですね。
知りませんでした。
ちょっとしたネタのつもりが良レスもらって感謝です。

102 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 12:03:27 ]
教えてください。

WinXP SP3 office2000を使っています。

ボタン1とボタン2があり、どちらのボタンを押しても ボタン1の色が変わるようにしたいのです。
以下のようにして記述したのですが、色が変わりません。私は何か勘違いしているのでしょうか?

Private Sub CommandButton1_Click()
  CommandButton1.BackColor = QBColor(10)  ' ボタン1のボタン色を変える 実行される
  Call hoge1                ' 関数1を実行
  CommandButton1.BackColor = QBColor(15)  ' ボタン1のボタン色を戻す  実行される
End Sub
 
Private Sub CommandButton2_Click()
  CommandButton1.BackColor = QBColor(10)  ' ボタン1のボタン色を変える 実行されない
  Call hoge2                ' 関数2を実行
  CommandButton1.BackColor = QBColor(15)  ' ボタン1のボタン色を戻す  実行されない
End Sub

宜しくお願いします。



103 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 13:09:52 ]
期待通りに動いていないんだから
どうみても勘違いです
ほんとうにありがとうございました

104 名前:デフォルトの名無しさん [2010/04/23(金) 13:27:55 ]
>>102
変わるぞ
三つ目を用意して
Private Sub CommandButton3_Click()
CommandButton1.BackColor = QBColor(10) ' ボタン1のボタン色を変える 実行されない
Call hoge2 ' 関数2を実行
CommandButton1.BackColor = QBColor(1) ' ボタン1のボタン色を戻す  実行されない
End Sub
試してみては

105 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 13:56:25 ]
マクロはときどき壊れるからなぁ
最後に正常に動いていたときの
バックアップを取るのは必定


106 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:02:38 ]
>>104
追試、ありがとうございます。そうですか、動きますか。
もう一度やってみたのですが、僕の場合は動きませんでした。

hoge2関数の処理時間が3秒程度と長いので、
ボタンの色を変えて処理中であることを示したいのです。
しかし自身のボタン色ではなくて、他のボタン色を操作します。
もしかしたら他のボタンのことは操作できないのかと思っていました。
ボタン色の指示行の間に入れた関数処理自身は
正しく実行されるのですが、
指示したボタンの色がまったく変化しません。
まるで「どのみち元の色になるんだから、色を変えるのは省略します」と
言っているみたいです。


107 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:04:05 ]
>>102

単に関数2が一瞬で終わってるだけじゃないか?

108 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:10:09 ]
2003でこれ動くよ

Private Sub CommandButton1_Click()
CommandButton1.BackColor = QBColor(15)
End Sub

Private Sub CommandButton2_Click()
CommandButton1.BackColor = QBColor(10)
End Sub

109 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:17:37 ]
doeventはさんでみるとか?

110 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:31:05 ]
ホンとだ
間に処理かますと処理後の色変更しかしやがらねー



111 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:51:22 ]
みなさん、いろいろ試してくれて、ありがとうございます。

僕は、以前に作ったExcelブックを使い回していて、必要に応じてボタンをcopyしたりして使っています。
なので自分で新規にボタンを作ったことがありません。
調べてみると、僕の使っているボタンは「オートシェープ」という部品のようです。
ボタンとオートシェイプとの違いで、できる/できない があるのでしょうか。
ちよっとパニックです。

>>110
ありがとうございます。できないですよね。
どうしてなんでしょう。もし何かヒントがあればおしえてください。宜しくお願いします。


112 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:55:17 ]
>>111
じゃあたぶんボタンの名前を間違ってるだけだな

あとシェープじゃなくてシェイプな。大した違いではないけど何か調べるときに
検索やヘルプでひっかかりにくくなるから正しく覚えておいた方がいい

113 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 18:06:43 ]
>>111
しばらく触ってなかったんでキーワードがみつからないが
色変更させてからシートなりオブジェクトなりを強制再描画させるとかの技はあるはずだ
でなきゃ点滅処理さえ効かない

114 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 18:16:36 ]
>>111

hogeを呼ぶ前に DoEventsでうまくいった

115 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 19:19:25 ]
>>105
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ


116 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:19:54 ]
>>103
>>104
>>105
>>112 死んでよし



117 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:49:19 ]
Mid関数と、Mid$関数の違いって、戻り値をバリアント型で返すか、文字列型で返すかだよね?
バリアント型で返さないとエラーになる場合ってのはどういうとき?

118 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:15:36 ]
>>115
あの餌で釣れるとは思わなかったんだが・・・

119 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:18:03 ]
>>116
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ


120 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 22:15:47 ]
>>117
違う
どっちも戻り値はString型



121 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:06:09 ]
オブジェクトブラウザで見ると、一応バリアント型とString型に分かれているけど、
評価しようとした時点で、必要に応じて自動でバリアント経由になってしまうから、
結果的に同じ意味にしかなり得ない、って感じかと。
VBA上では単にMid$がMidのエイリアス扱いの可能性もあるけど、それは判断のしようがない。

WindowsSDK付属のOLE/COM Object Viewerで「Visual Basic For Applications (Ver 6.0)」を覗くと、
Stringsモジュールに
BSTR _stdcall _B_str_Mid([in]BSTR String, ...
VARIANT _stdcall _B_var_Mid([in]VARIANT *String, ...
の二つが見つかるのだが、これがMid$とMidに対応しているのかなあ。

122 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:00:21 ]
みなさんのお知恵を、お貸しください。
下のようなif文を書いているのですが、まるで能が無くて、書いてて悲しいです。

nの中心付近を整数で求めたいんです。
下の例ではn=16ですが、実は250以上あったりして、これを全部手打ちで書いています。
何か規則正しいので、計算式で求められそうなのですが、うまく考えられません。
n=0, n=1は、if文で振り分けて、それ以上がなんとかならないかと。

    If (n = 0) Then c = 0
  ElseIf (n = 1) Then c = 0
  ElseIf (n = 2) Then c = 2
  ElseIf (n = 3) Then c = 2
  ElseIf (n = 4) Then c = 3
  ElseIf (n = 5) Then c = 3
  ElseIf (n = 6) Then c = 4
  ElseIf (n = 7) Then c = 4
  ElseIf (n = 8) Then c = 5
  ElseIf (n = 9) Then c = 5
  ElseIf (n = 10) Then c = 6
  ElseIf (n = 11) Then c = 6
  ElseIf (n = 12) Then c = 7
  ElseIf (n = 13) Then c = 7
  ElseIf (n = 14) Then c = 8
  ElseIf (n = 15) Then c = 8

板汚し、すみません。

123 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:27:04 ]
>>117, 120, 121
Mattew Curland著 「Advanced Visual Basic6」より

You should always use the $ versions of string function whenever they are available.

If a $ version of a function is available, then its non-$
counterpart actually returns a Variant rather than a String.
Although the VB compiler is smart enough to avoid duplicating
the string when assigning the return value of a Variant
function to a String variable, a significant amount of overhead and
code generation is involved in using the non-$functions.
If you think the extra character is too much trouble,
one look at the generated code wil cure your laziness.
Search for $ in the Object Browser to get a list of the $functions.

ってことで、$版使ったほうがいいという話。
ただ、VBAなんて手抜いてナンボなんで、目くじらたててやる必要もないよなあ。

124 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:38:09 ]
>>122
c = WorksheetFunction.Ceiling(n / 2 + 0.1)



かな?

125 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:54:05 ]
>>123
×Mattew ○Matthew

みんな買おうZE☆
www.amazon.co.jp/Advanced-Visual-Basic-Techniques-DevelopMentor/dp/0201707128/ref=sr_1_3?ie=UTF8&s=english-books&qid=1272081189&sr=8-3

126 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 13:26:04 ]
>>124
ありがとうございました。できました。
c = WorksheetFunction.Ceiling((n / 2 + 0.1),1) と、,1を追加しました。
大変助かりました。ありがとうございます。

Excelの命令が使えるこはビックリでしたが、
それよりも、VBAで切り上げ計算の演算子がないのがショックでした。
ありがとうございました。

127 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 13:40:26 ]
>>126
これでもいいんじゃね

C = Int(n / 2) + 1
If C = 1 Then C = 0

128 名前:デフォルトの名無しさん [2010/04/24(土) 14:33:34 ]
>>127
ありがとうございます。
そうですね。1の特殊性がなければ、上の行1行でいいですね。
ありがとうございます。
助かりました。

129 名前:デフォルトの名無しさん [2010/04/25(日) 02:38:39 ]
教えてください。

Excel VBAのプログラムを書いて、仕事の改善に使っています。

しかし、VBAのテキストエディタが使いにくいので、なんとかできないかと思っています。
VBAエディタで不満なのは、
・自分の好きなレイアウトでソースが書けない
   半角スペース、TABが無視されてしまい、ソースが見にくい
・TABが半角スペースになってしまう。

そこで、別途VB.netなどを買えば、VBA内蔵のエディタはoffになり、
VBのエディタ(TABも半角スペースによる位置揃えも可能)が使えるものでしょうか?
ブレークポイントやステップ実行なども使いたいです。


130 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 02:50:13 ]
無理



131 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 02:54:30 ]
>>129
そんなあなたにはExcelに埋め込むのは止めて
RubyとかPythonでWIN32COM経由で
Excel操作をすることを強くお奨めします

132 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 04:19:39 ]
>>129
マクロはときどき壊れるからなぁ

133 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 11:01:07 ]
>>129
あなたがVBAのエディタに合わせたほうが早いです。以上。

最初はみんな用意されたものに抵抗するんだよね。

134 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 11:23:33 ]
DLLで関数を公開することって出来ますか?
DLLの読み込みはできるようなので

・スクリプトのDLLをロード
・セル操作などをスクリプトに公開
・VBAからスクリプトをコール
・スクリプト内で計算
・スクリプト内で公開されたセル操作などを使いExcelに出力
・VBAに戻る

といったことをやりたいのですが可能でしょうか?

135 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 11:28:11 ]
ScriptControlで直接Excelからスクリプト呼び出しするのが普通。

136 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 19:20:36 ]
もとからスクリプトサポートされてるんですねthxでした

137 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:52:08 ]
微妙にVBAとは違うかもしれないのですがこちらで質問させていただきます
ボタンを押して現在から2時間後を出してくれるように
Cells(7, 3) = DateAdd("h", 8, Time)
と作りセルの書式設定のユーザー定義で時間と分だけを表示するようh:mmに設定しました。
同じ日内で収まる場合なら正常に8時間後を出してくれるのですが、
日を跨いでしまうとなぜかユーザー定義が勝手にyyyy/m/d h:mmに変わってしまいます
宜しければ対処法をご教授くださいませ


138 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:13:42 ]
>>137
Cells(7, 3).Value = Format(DateAdd("h", 8, Time), "h:mm")

139 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:17:27 ]
>>138
無事表示してくれました
本当にありがとうございました

140 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:06:48 ]
面接でVBAをアピールしたら「そんなもの下の下でしょ?(笑)という反応でした。
そんなに駄目っすか?だったらVBできますって言った方がまだ良い?



141 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:11:28 ]
VBAの良さって普通の人であればあるほど知らない。
ただ、他のことも出来てVBAもできる、ぐらいじゃないと意味がない。

142 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:15:50 ]
業種と職種による。
プログラマーならVBAは基礎知識のうちだからアピールポイントにはならない。

143 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:29:18 ]
基礎知識なのか
excelとかそもそも使わないし
C++一筋だったからVBA最近まで知らなかったよ

144 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:47:01 ]
事務員で「Excelできる人歓迎」みたいに書いてあったらVBA知ってるとかなり有利。
プログラマーならVBでもアウトだろうねえ。まあ会社にもよるだろうけど。

145 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:52:03 ]
まあそうだけど事務員とプログラマーじゃ一応給料が結構違うし
事務員は月給12万くらいだけどプログラマーなら25万くらいあるし

146 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:27:51 ]
客先常駐のPGだと経歴書にEXCELとかVBAを一切書いてなくても
本業の待ち時間にVBAのちょっとしたものを作らされたりするよね。

147 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:50:51 ]
プログラマーじゃないけど出身が社内SEなんで、社内SEなら業務ツール作りで
VBA使えることって便利だし重要かなと思ってアピールしたんだけどなあ・・・。

他には一応Java、Cはやってるし、鯖で必須のPerl、Python、VBSあたりも普通に
使えるんだけど、小さな会社の社内SEなんで、鯖管理で使う後者はともかく、
前者はアピールしない方が良いかと思ったんだよな。

そもそもプログラマー志望じゃないし、自社開発も無いって話だったんで、
なんか無言でシコシコ書いてるのが好きなんだろ?って思われなくなかった
っていうか。

148 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:18:19 ]
それを面接で言えばよかったんじゃないの?なんで言わなかったの?

149 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:24:47 ]
>>148
いやあ、面接官がIT系のコンサル野郎だったでやんす。
「システム導入こそすべて」みたいな奴で、もうどうにもならんかった。
開発も泥臭いとこはやってなさそうな感じの。

まあ、そんな奴がのさばってるって時点でアレなんですが。

150 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:55:07 ]
マ板でやれや



151 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:18:12 ]
Excel2007です
現在MicrosoftWebBrowserを利用して
指定セル(住所が書いてある)の地点のGoogleMapが表示されるようにしてあります。

ここでもう少し高度な操作をしたいために(ピン操作やルート案内など)
GoogleMapsAPIを使用したいのですが
ExcelVBAでGooglemapsAPI(javascript?)をGoogleMapに投げ込んで
結果をMicrosoftWebBrowserに返すにはどうすればいいのでしょうか?


152 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:21:43 ]
>>149
気持ちは分かる

153 名前:デフォルトの名無しさん [2010/04/27(火) 11:34:07 ]
filecopyで、ネットワーク上の共有フォルダにファイルをコピーさせたいのですが、
共有フォルダにアクセスできない場合のエラー処理が出来ずに困っております。

dirでいけると思ったのですが、アクセスできない場合、dirでもエラーになってしまいます。

何かよい方法はないでしょうか。

154 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 12:28:48 ]
On Error

155 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:23:14 ]
On Error でも良いんですが接続先のサーバーやPCが落ちてるときなど
タイムアウトで実際にエラー処理に移るまでに時間が掛かりすぎて困ります
このエラーが出るまでのタイムアウトを短くするにはどうすればよいでしょう?

156 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 14:18:45 ]
>>155
ファイル処理とかネットワーク処理は、ちゃんとやろうとすると意外と大変。
とくにVBAの関数だけではタイムアウトが制御できないから、
グローバル変数を使ったフラグとタイマーを使って時間内に終わったかどう自分で調べるような仕組みを
ちまちま作るしかない。

フラグセット→タイマーセット→On Errorで強制終了回避→ファイル処理→すぐに終わったらタイマー解除
タイマーで強制的に抜けたらフラグクリア
フラグがセットされたままだったら処理成功と判断する

みたいな手順を、よく考えて作る。

157 名前:デフォルトの名無しさん [2010/04/28(水) 07:47:23 ]
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    どういたしまして
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |

158 名前:デフォルトの名無しさん [2010/04/28(水) 16:43:11 ]
ほんと糞言語だよな
スタックないなんて
切り上げ切捨てのどっちかもないよね?

159 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 17:05:55 ]
スタックっつうか配列以外のデータ構造がまともに扱えない

切り上げ切捨てはどっちも出来る

160 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 19:08:50 ]

実装できないwww




161 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 21:23:58 ]
糞言語だと思うなら、使わなければいいじゃん

162 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:24:00 ]

vbaは言語じゃねーよwww


163 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:44:06 ]
連休らしくなってまいりました
構ってちゃんの季節ですね

164 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:46:53 ]
ふぅ(´ω`)

165 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:47:53 ]
>>163
jukai-deep-ice.com/mono/nazo/kora.htm

166 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 00:43:54 ]
VBに足りない機能は
全部COMという万能倉庫から持ってくればいい。

167 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 09:57:52 ]
COM使うならExcel使う必要も無ければVBAを使う必要もない

168 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 10:40:35 ]
意味がわからない。
そもそもVBAのグローバルコンテキスト自体がOfficeのCOM(IDispatch)だよな。
で、VB(A)以外でCOMを使うということだけど、

他言語で書いたらどれだけコーディングが面倒かご存知?
まあ、WinOLE32とかいちいっちコーディングするのが面倒じゃなくて
ブラウザも要らないなら、どうぞって感じなんだけど。
あと、Excelと密に連携取れないね。

169 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 10:47:31 ]
え?

170 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 12:19:42 ]
ExcelというアプリのUIを丸ごと再現するのは面倒だし意味ないし
VBAだけではなかなかかゆいところに手が届かないし
事務員がExcelさわってる裏で事務作業の手伝いをさせるのがVBAの本来の使い方だから



171 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 12:41:39 ]
まあ、ここでExcelVBAを否定しても意味ないし

172 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 13:47:12 ]
たしかにRubyは面倒だな

173 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:30:42 ]
みなさん、普段はどんな言語を使ってるんですか?
・・・と聞こうと思ったけれど、ここは事務員のが多いって話でしたね。
ということは、VBScriptとかhtmlとかJavascriptとかのエンドユーザ向け言語ですか?

174 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:37:53 ]
またもや知ったかか

175 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:42:01 ]
ここで一番多いのは警備会社勤務
2ちゃんの質問スレで困ってる人を見つけたら助けるふりして雑談始めるのが仕事

176 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:46:30 ]
事務員だけどVBAできます・・・・というか、IT屋のPGとして開発経験があれば、
プロジェクト規模とかステップ数でPGとしての職歴をアピールできるのかもしれないけど、
そうでない場合はアピールしようが無いというか、何をもってできるとするのかよくわからん。

177 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:47:28 ]
>>175
自宅警備会社というやつですか?

178 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:01:55 ]
>>177
自室です。

179 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:14:27 ]
>>173
ネットが繋がらない環境でJava使ってる。
VBAは各種ファイルの生成とか、XMLやらブックの解析とか。

180 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:08:26 ]
お話に花が咲いているところ すみません。教えてください。

office2000 XP SP3 です。

PCのCOMポートから、RS232Cで文字を受信して、Excelシートに表示しています。

while(1)
  if (受信文字=あり) then
    Cells(y, 1).Value = 受信文字
    y = y + 1
  endif
wend
という感じです。
いい感じに動作するのですが、シートの一番下の行まで行って、
次の行を書くときに、スクロールしたいのですが、
画面1行スクロールをするには、どのような記述をするのでしょうか。

宜しくお願いします。



181 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:20:05 ]
officetanaka.net/excel/vba/tips/tips79.htm

182 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:08:21 ]
Application.Calculation = xlCalculationManual
で、関数の計算を止めた場合、

WorksheetFunction.Maxなどで関数をVBA内で使用(シートへの記載は無し)したら、
その計算結果を利用する判定時に誤作動したりするのですか?

やはり直前でxlCalculationAutomaticに戻さなくてはいけないのですか?

183 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:24:43 ]
お話に花が咲いているところ
嫌味言うなら質問するな


184 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:40:06 ]
気の利いたこと言おうとして失敗する人っているよね。
その一言が余計、という。

「へえ。君って○○大学出てるんだ」
「いやあどうしょうもないバカ大学でお恥ずかしい(謙遜のつもり)」
「……俺の息子はその大学を第一志望にして入学したんだよ(怒)」

185 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 21:11:20 ]
つ Ca

186 名前:180 mailto:sage [2010/04/29(木) 22:37:54 ]

どうもありがとうございます。大変助かりました。
VBAの命令は、何でもあるんですね。ビックリしました。おかげさまで、なんとか作れそうな感じです。

以下のような感じで、現在の画面の最下行数を計算して
  temp_str = ActiveWindow.VisibleRange.Cells(1, 1).Address ' 現在の画面の左上セルの座標「$A$123」を文字で得る
  n = InStr(1, temp_str, "$")                ' 左の$を見つける
  n = InStr(n + 1, temp_str, "$")               ' 右の$を見つける
  y = Val(Mid$(temp_str, n + 1, Len(temp_str) - n)) + Windows(1).VisibleRange.Rows.Count ' "123"を取り出し、画面の縦の数を加算
この行数と、次回の書込予定セルのy位置と比較してスクロールしながら、書き込んでいくつもりです。

ここで、もう少し教えてください。

上記の最下行の計算ですが、VisibleRange.Cells(1, 1).Address の返値が文字で返ってくるので、めんどうな文字計算をしています。
これが、直接数字で返ってくる命令はないものでしょうか。

temp_str = ActiveWindow.VisibleRange.Cells(1, 1).Address というのは、現在のアクティブウインドウに対しての命令だと思います。
しかし別シートを開いている時でも、文字書込は決まったシートに バックグラウンドで実行したいのです。
シート指定をすればいいと思って
a = Worksheets("AAA").VisibleRange.Cells(1, 1).Address
などと やってみましたが、エラーだと言われました。
どのように書いたら、バックグラウンドで実行できるのでしょうか。

よろしくおねがいします。


187 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:43:47 ]
>>184
その会話で気の利いたことを言った(つもり)のはどっち?

188 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:45:56 ]
>>186
a = Worksheets("AAA").Range(hoge).Cells(1, 1).Address


189 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 11:02:24 ]
>>186
Visibleってのは「見えている」範囲のこと。ウィンドウを「切り替えたら見えるだろう」範囲ではない。
だから裏画面では意味がない。

190 名前:180 mailto:sage [2010/04/30(金) 19:02:09 ]
教えてくださいますでしょうか。
cells(1,1) と range("A1")という、2つの表現方法がありますが、
forで回すことを考えるとcells(1,1)のほうが都合が良いと思います。
しかし、range()も使いたいことが多いです。
そこで、この(1,1)という値を"A1"に変換するような関数はあるのでしょうか?

現在は、
dim array as string
dim rng_str as string
array = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

x = 1
y = 1
rng_str = mid$(arry, x, 1) & format(y)

などとやっています。
何か1発でできる関数があると便利なのですが。




191 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 19:13:14 ]
>>190
アドレスとかじゃ本末転倒か

192 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 19:23:11 ]
そうですね。できれば、aaa = Conv(1,1)みたいな感じの物がVBAに備わっていることを期待しているのですが、
やはりむずかしそうでしょうか。

あと、もう1つよろしいでしょうか。
セルを選択するのと反対に、解除するのにはどのように書けばよろしいでしょうか。
選択は、セルの周囲の線が太く見えて、解除は、セルの周囲の線が太くなくなるということです。

選択 cells(1,1).select

解除 cells(1,1).Deselect と書いたら、叱られてしまいました。



193 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 19:43:52 ]
>>190
rng_str = Cells(Row, Col).Address(False, False)

とりあえずこうするといいよ。

194 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 21:17:14 ]
>>187
>その会話で気の利いたことを言った(つもり)のはどっち?
二つ目の鍵カッコだよ。

この会話では、相手が不機嫌になった理由を教えてくれたから、
「ああ、俺余計なこと言ったな」と本人も気づくけど、
普通は腹の中で「この野郎」と思ってもわざわざそれを伝える人は少ない。

結果、本人はずっと「俺ってユニーク」などと思い込んだまま、
他人をイラつかせ続けることになる。

まあ、俺のことなんだが。

195 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 21:59:14 ]
>>192
行列の変換は Chr(64 + y) & x
ただしZ列より右は表現できない
AA列以降もサポートしたいなら自分で関数を作ってモジュール化すればいい

セル選択の解除は不可能

196 名前:デフォルトの名無しさん [2010/04/30(金) 22:01:57 ]
>>192
一般機能で出来ないことはvbaでも出来ない。

シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん

197 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 22:05:08 ]
何でもいいけどいい加減>>182に答えてくれよ!

さもないと自分で調べるぞ!!

198 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 23:29:49 ]
>>193
ありがとう。Row=1, Col=1 → A1 と出ました。ありがとう。
これで楽になりそうです。

>>195, >>196
>セル選択の解除は不可能
>シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん
そうなのですね。ありがとうございました。
確かに、自分でExcel使うときは、どこす1箇所選択されています。
助かりました。ありがとうございました。


199 名前:デフォルトの名無しさん [2010/05/01(土) 15:32:28 ]
>>197
調べろよw
あと手動計算にしなくても再計算すればよろし
マクロの記録でF9だ

200 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:57:32 ]
ていうか再計算止めたからってWorksheetFunction
の計算まで止まるわけないだろ。
むしろ発想自体新鮮w



201 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 19:46:16 ]
         / ̄(S)~\  <                       >
       / / ∧ ∧\ \<  嫌なら見るな! 嫌なら見るな! >
       \ \( ゚Д,゚ ) / /<                       >
         \⌒  ⌒ /  ノ Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Yヽ
          )_人_ ノ  
          /    /
      ∧_∧ ■□ (    ))
     (   ; )■□  ̄ ̄ヽ
   γ⌒   ⌒ヽ  ̄ ̄ノ  ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|

202 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:37:18 ]
>>199-200
自分で調べるのが面倒だからこその質問スレだろうが!
情弱なめんな、ゆとりなめんな質問に答えてくれて本当にありがとうございました。

203 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:41:08 ]

冷静な自己分析だと思うぞ

204 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 06:25:26 ]
>>202
>自分で調べるのが面倒だからこその質問スレだろうが!
自分で調べてもどうしてもわからない時の質問スレだよ。
別に2chじゃなくとも、人に教えを請う時はそれが当たり前だと思うが。

205 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 06:59:03 ]

2ちゃんの画一的なコメント 乙

206 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:09:35 ]
てか教えてGooに行けばいいんだよな

207 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:47:44 ]
       -‐''''"´ ̄``ヽ、              ____
       /     _     ヽ        //´   __,,>、
     /        ̄ ̄   {        /::/ / ̄:::::::::::::::\
      l _ィニニア二二二ニヽ、j._      /::::l/::::::::::::::::::::::::::::::::l
     | 0Lj/-‐-レノ ノ_ヽ:::`ヽ     l:::::::::::/l/lノノ/_イ:::::l
     レ:r、/ イ゚テ   ピト`|::|      l:::::::::/ rtテ、  .ィtq l::::::|
      l:lヘ  '"   ,j  '"/ノ      |::lヘ!j  ´  ,j   !;:::/
     ヽヽ、   r‐-,   /'         レリー 、    ,....,  lノ/
        lヽ、  ̄ /         `ヽ、lヽ 、  ̄ /´
     _,r┴‐-`v´-‐j-、__   , -‐-、_r┴─'ー‐チト       バルス!!
  / ̄/:.:.:.:| ̄ ̄`T ̄´|:.:.:.:l´ `ヽ /    ヽ ̄`ー-‐'´`''''⌒ヽ
/   ,':.:.:.:.:.l    l   l:.:.:.l    \  _r‐、-、-、r,    、   ',
     |:.:.:.:.:.:.!     !   !:.:.l   ,. -‐ゝ/// 〉 〉 〉 〉 〉    !   ',
    l:.:.:.:.:.:.l     |   l:.:.:l  /  人〈〈〈〈 ' ' ' /っ   l    l
    l:.:.:.:.:.:.!     !   l:.:.:.ト/   /  ```´-ァ‐'''"     /   l
、__/:.:.:.:.:.:l     |    |:.:.:ヽヘ  l    //         / _ ィノ
    /:.:.:.:.:.:.:!    l   |:.:.:.:.:l `ーヽ、_ノ´l、______/lニ二」
____l:.:.:.:.:.:.:.|      l   |:.:.:.:.:!        |_  ( ( ) )_〕|   l
   l`ー‐‐'匸二l ̄ ̄l二フーイ       /   ̄ `‐‐'´ ヽ  |

208 名前:デフォルトの名無しさん [2010/05/02(日) 15:58:59 ]
> 意思決定までコンピューターが出来るようになると、
> 人間自体が必要なくなる。

今でもほとんど「意思決定」に人間なんか要らないだろ。

1. 提案者「こんなアイディアがあります」
2. 決定者「費用対効果を数字で示せ」
2. 提案者「費用が○○円、利益が△△円を見込んでいます」
3. ○○ < △△か?
   true → 4.へ
   false → 5.へ
4. 決定者「そのアイディアを採用する」
   → 6.へ
5. 決定者「そのアイディアを却下する」
   → 6.へ
6. 決定者「次のアイディアはなんだ?」

結局のところ、「意思決定」(笑)とやらをやる人間はこんなロジックで動いているんだから、
人間なんかおく必要ない。Excelどころか、20年前のPCでBASICで組んでもいいレベル。

「費用対効果を出せ」「数字で示せ」「説明責任を果たせ」、って言うと非常に説得力が
あるように見えるけど、実は判断基準のなすりつけなんだよね。

209 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 17:06:47 ]
>>208
んじゃそのプロセスをマクロで表現しなよ

210 名前:デフォルトの名無しさん [2010/05/02(日) 21:18:22 ]
質問させてください。

A列にx軸の値、B〜H列に7系列分のy軸の値が書いてある表で、
A,B列の値を選択してグラフを書かせるとA列をx軸、B列をy軸(系列1)としてくれるのですが、
A〜H列の値を選択してグラフを書かせるとx軸はblankで、A〜H列全てがy軸(系列1〜8)になってしまいます。
A列をx軸にして7系列分のグラフを書くにはどのように工夫したらよいでしょうか。



211 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 21:54:14 ]
あなたは知らないのですか?

212 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 13:25:00 ]
>>210
グラフの種類を散布図にして
元データの設定ウィンドウでY軸からA列を消して、X軸にA列を追加

213 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 21:21:37 ]
エクセルのサイズが500MBに届きそうなんだがこんなもんか?

214 名前:デフォルトの名無しさん [2010/05/04(火) 22:22:06 ]
こんなもんかと聞かれても困るな w
まぁ常識的に考えて肥大しすぎだとは思うが w

215 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 22:53:39 ]
peiyorin.cocolog-nifty.com/blog/2007/09/excel_1635.html

これ以外にもシートをコピー→新しいブックの新しいシートに貼付け も効果があるらしい
(シートタブからのシートのコピー はダメ)

216 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 23:40:10 ]
>>215
それやると、セルの幅はコピーされない(初期状態のまま?って言うの)んと違うかったっけ?

217 名前:デフォルトの名無しさん [2010/05/04(火) 23:50:05 ]
>>216
? 普通に書式も一緒にコピーできるけど?

218 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 00:33:09 ]
ページ設定がコピーされないんでそのまま印刷するとおかしくなるだけ

219 名前:デフォルトの名無しさん [2010/05/05(水) 12:47:49 ]
>>210
Excelは、変なお節介があり、ユーザーは動作の予想ができないので、
覚えにくいし、使いにくいですよね。

さて、具体的な方法は自分で考えてもらうとして、イメージを説明します。
グラフを作るとき、多くの場合は、希望するデータ範囲を囲って、
グラフボタンで進んで行って「グラフできたぁ」となるワケですが、
これは、EXcelのお節介な自動機能でグラフを作っているだけなので、
覚え始めのころは「このやり方が全てだ」と思い込んでしまいます。
僕もそうでした。しかし、この方法では、いつかは行き詰まります。

本来あるべき論としては、「この列のデータを、あの列のデータに対してグラフ化したい」だと思います。
このやり方が、本当のグラフ作成なのですが、
Excelのお節介で、私たちは、それが想像しにくいようになっています。

範囲を選択して、グラフボタンで、グラフウィザードを進んで行きますが、
そのウィザードの途中に、次のような画面が出てきます。
mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100505123431.png
この画面では、すでにEXcelが勝手に選んだ「系列1,系列2」というY軸の値が選ばれています。
まずこれを削除します。そして、その右側の「Xの値」「Yの値」の所の文字も消して、
その枠の右側の三角?っぽいボタンを押します。
すると、ウィザードを開いているのに、なぜかシートに触れてしまいますので
自分の好きなY軸の範囲を選択します。同様にして、Xの値も範囲を指定します。
これで、EXcelのお節介なく、自分の好きな軸に、自分の好きな範囲を指定してグラフが作れます。

この方法は、既に出来上がっているグラフに対しても可能でなので、
自分で調べて見てください。

僕の思うグラフの作成は、「これをXに、これをYに」という指定をするのが正しい方法、
というかユーザーがイメージできる作成方法だと思っています。
Excelやワードのお節介が減ることを期待したいです。

220 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:32:18 ]
VBAの話をしろボケ



221 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:23:24 ]
>>219
なかなか面白い話しやけど、確かにスレ違い。

222 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 17:44:55 ]
配列に数が入っている状態で,
平均値などを計算したい場合,
一度,シートに書き出してエクセルのaverage関数を使うしかないのでしょうか?

223 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 17:47:19 ]
いいえ

224 名前:222 mailto:sage [2010/05/08(土) 17:55:03 ]
>>223
すいません

自分で関数を定義したくはないのですが
そのようなサブルーチンがvbaにも実装されているのでしょうか?

225 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:11:12 ]
WorksheetFunction.Averageって配列を受け付けられなかったっけ?

226 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:49:16 ]
配列できるね。

227 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:13:10 ]
セルにAddCommentで複数行のコメントを入れようとしてます。
vbNewLineで改行していれようとすると5行までしか入りません。
無限にいれれるようにするにはどうしたらいいでしょうか?

228 名前:222 mailto:sage [2010/05/08(土) 19:13:18 ]
例えば,
配列 a[100]
を定義したとして,a[10]からa[i]までの平均値をだしたいのですが
excelの関数で大丈夫ですか・

229 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:24:00 ]
>>228
じゃあ、10〜iまで回せばいいじゃん

230 名前:222 mailto:sage [2010/05/08(土) 19:49:42 ]
>>229
可変長の部分をa_temp というdouble型の配列を作成,そこに格納し
ave = WorksheetFunction.Average(a_temp)
としても 0 しか返ってきません.
何か間違っていますでしょうか?



231 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:50:24 ]
平均ぐらい自分で出せよカス

232 名前:222 mailto:sage [2010/05/08(土) 20:13:58 ]
>>231
枯れたサブルーチンがあるなら自分で書くよりミスは圧倒的に減るはずですよね.
なんとかなりませんか

233 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:15:05 ]
この程度でミスしてる時点で他のあらゆるコードが信用出来ない。おまえさんはもう諦めろ

234 名前:222 mailto:sage [2010/05/08(土) 20:19:47 ]
>>233
vbaは何分初めてなもんで
よろしくお願いいたします

235 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:23:10 ]
何事もほどほどにな

236 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:45:32 ]
>>227
気のせいでした

237 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:21:50 ]
>>234
とりあえず、作ったプログラムを丸ごと貼り付けて

238 名前:222 mailto:sage [2010/05/09(日) 09:59:16 ]
お騒がせしました.
求めた平均値を入れる変数の型をlong型にしていたため,
常に0となっておりました.
double型に変えると無事動作しました

ありがとうございました

239 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 15:56:22 ]
あるブックでマクロ実行中、他のブックを操作する方法ないですか?

240 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 17:08:43 ]
>>239
もう少し詳しく書かなきゃわからんよ
他のブックを操作するとは例えばどんな事?

また、あるブックでマクロ実行中て書いてるけど
どんな処理をしている時を想定しているの




241 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:07:08 ]
>>240
イメージとしてはExcelの二重起動でしょうか
マクロの実行中ってほかのエクセルの編集作業が全くできないと思うんですが、それをできるようにしたいです。

242 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:16:36 ]
そのまんま、Excelを2重起動すればいい。

243 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:25:38 ]
>>239
取りあえずDoEventsでも入れてみれば

244 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:48:48 ]
>>242-243
質問が悪かったです。ちょっと出直してきます

245 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 20:11:42 ]
自己解決

246 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 08:04:51 ]
phpのmysql_connect()関数が使えません。
環境は、
windows7
Apache2.2
PHP5.1
mysql server 5.1
です。
普通のphpファイルは開けるのですが、
mysql_connect()を使うとブラウザでページを表示できなくなります。
なぜでしょうか?

247 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 08:07:15 ]
すいません。誤爆しました

248 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 23:22:47 ]
図がないシートなのに、保存しようとすると
「図が大きすぎます」エラーが出るのは
どんな理由が考えられますか?

VBAがたくさん使ってあるシートです。
でも、図の類は何もありません。

249 名前:デフォルトの名無しさん [2010/05/12(水) 04:09:28 ]
スタックが小さくて、まともな業務ソフトつくれないよ。
マイクロソフトは、あいかわらず、いつまでもユーザー泣かせのことやってる。



250 名前:デフォルトの名無しさん [2010/05/12(水) 04:12:14 ]
これだけメモリー搭載が増えてる時代なのになんでスタックを大きくしないのか
不思議でしようがないいよ。
故意にユーザーを苦労させ、エラー出るように設計してるとしか思えない。




251 名前:デフォルトの名無しさん [2010/05/12(水) 04:14:37 ]
なんか、日本語版だけ故意にスタック小さくしてるような感じする。


252 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 07:36:24 ]
スタックが増えても、落ちるまでの時間が多少伸びるだけじゃねえのw

253 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 12:40:58 ]
VCのスタックサイズのデフォルトは1MBなんだが、VBAではどのくらいなんだ?

254 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:04:22 ]
条件式について質問です。

処理対象データ ↓

A B C D
1 あ い う
1 あ い う
2 あ い う
3 あ い う
3 あ い う
4 あ い う
4 あ い う
4 あ い う

というデータがあるとします。

A列の値が同じである間、同じSheetにデータを出力できるようにし
A列の値が異なる場合になったならば、別シートに出力変換したいんだけども
何かアドバイスを貰えませんか。

255 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:11:08 ]
>>254
Aを上から見ていって、
前の値と比較すればいいでしょ。

Set procRange = [A1]
Set outputSheet =
While procRange <> ""
 If procRange.Offset(-1) <> procRange Then


 Set procRange = procRange.Offset(1)
Wend

256 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:13:32 ]
途中で投稿されちゃった
動かせる環境ないから適当に直せ

Dim procRange As Range
Dim outputSheet As Worksheet

Set procRange = [A1]
While procRange <> ""
 If procRange.Row = 1 Then
  Set outputSheet = Worksheets.Add
 ElseIf procRange.Offset(-1) <> procRange Then
  Set outputSheet = Worksheets.Add
 End If

 ' なんか適当な処理

 Set procRange = procRange.Offset(1)
Wend


257 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:21:31 ]
>>256
返答ありがとうございます。
高度な文面なので検索してちょっと理解深めます。
Offset〜〜に解決の糸口を見つけられそうなので
イジイジしてきます。ありがとおおおおおおおお

258 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 18:19:08 ]
教えてください。

質問の概要
ワークシートの変更を禁止したいです。

説明
・シート内にあるボタンを押すと計算が始まります。
・その計算は、そのシート内のセル内容を読込んで計算するので、シートを変更されると、困ります。
・そこで、計算している間は、シート変更を禁止させたいです。

計算中にシートタブがクリックされたら、このような動きにしたいです。
 メッセージボックスを表示して「今はダメよ」と表示する
 もしメッセージボックスを表示することで、計算が狂ってしまうなどの問題があるのなら、
 最低でも、シート変更を無視、無反応にし、計算を安全にしたいです。

どのようにすれば良いでしょうか?

宜しくお願いします。


259 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 18:21:51 ]
Application.ScreenUpdateing = Falseじゃだめなの?

260 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 20:54:35 ]
>>259
ありがとうございました。Application.ScreenUpdating = Falseにより、期待通りの動きが出来ました。
すばらしいです。

ただ、不思議なことがあります。教えていただけませんでしょうか。

以下のように、計算前にボタンの色を変えて、
計算後にボタンの色を戻すようにしているのですが、その色の変化が、うまく動きません。

従来、ScreenUpdatingを入れない時は、ボタン色が正しく変化します。
   Button1.BackColor = QBColor(赤)   ' 色を変える
   Call KEISAN
   Button1.BackColor = QBColor(白)   ' 色を戻す

次のように、ScreenUpdatingを入れると、
   Button1.BackColor = QBColor(赤)
   Application.ScreenUpdating = False
   Call KEISAN
   Application.ScreenUpdating = true
   Button1.BackColor = QBColor(白)
白のまま計算を開始して、計算が終わると白→赤→白と、まとめて変化します。

ScreenUpdatingを、' にすると、正しく色が変化します。(再現性があります)
どうしてこんなことが起こるのでしょうか?

宜しくお願い致します。




261 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:24:18 ]
>>260
ボタンの背景色の変更と、その色で画面が更新されるタイミングには実際にはブランクがある為。
VBAマクロ実行中も一定の間隔で画面の更新処理は走るが、
ScreenUpdatingがFalseの時はその処理が妨げられる。
ScreenUpdatingをTrueに戻すと、とりあえず画面全体を更新しなおすので、
後述の処理だとまとめて変化したように見える。

262 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 23:44:46 ]
できました

263 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:00:39 ]
Button1.BackColor = QBColor(赤)
Call DoEvent
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)

だったかな

264 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:03:13 ]
全然違った
スマソ orz

Button1.BackColor = QBColor(赤)
DoEvents
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)

265 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:07:09 ]
自作関数をセル上に入力すると、ポップアップで引数の説明文を表示させるようにするにはどうしたらいいのでしょうか。
例えばセル上に "=IF(" まで入力すると
IF(論理式,[真の場合],[偽の場合])   と、表示されますが、
このポップアップ表示されるやつを自作関数でも表示させたいのです。

ご教示よろしくお願いします

266 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 02:50:22 ]
自己解決

267 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:21:52 ]
>>264
ありがとうございました。なんとか出来ました。
僕のExcel (office2000)だけなのかわかりませんが、教えてもらった方法だと、症状が改善しませんでした。
Button1.BackColor = QBColor(赤)
DoEvents
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)      動作結果 ボタンon→KEISAN→赤→白のままなんです。

Button1.BackColor = QBColor(赤)
Call KEISAN
Button1.BackColor = QBColor(白)

Sub KEISAN(){
  DoEvents
  Application.ScreenUpdating = False
   :
   :
  Application.ScreenUpdating = true
End Sub
     のようにKEISANの中に置くと 動作は、 ボタンon→赤→KEISAN→白となります。

でも、解決できて良かったです。どうもありがとう。感謝します。
// ------------------------------------------------------------- //
別件ですが、VBAのエディタについて教えてください。
行頭でTABキーを打つと、カーソルは4文字毎に飛んでいきます。しかし、BackSpaceキーを1回押しても、1文字分しか戻りません。
というか、TABが4スペースになってるみたいです。これを、TABのままにして、BSキー押したときに、1TAB分戻るようには出来ないでしょうか?
ところが、何かの都合?でBSキーで1TAB分戻ることもあります。もう、わけがわかりません。半分怒っています。
これは、どのような時に起こるのでしょうか?
通常のエディタのように動かないので、使いにくくて困っています。すみません。ご存じでしたら、どなたか教えてください。


268 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:31:47 ]
つメモ帳

269 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:38:07 ]
>>267
一般的には、TABで送ったものはSHIFT+TABで戻すんじゃね?


270 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:50:10 ]
>>269
ありがとうございます。Shift+TABを、Excelでやってみました。

VBAエディタでは、確かに出来ました。左に1TABずつ戻ります。初めて知りました。
ところが、秀丸では、Shift+TABは、エラー。
メモ帳では、Shift無視で右にTABしていきました。

text editorは、space4個はspace4個、tabはtab、として置いて欲しいと思っています。
space4個打ったところでは、BS1回で、1spaceが消えればいいし、
tabを打った所では、BS1回でtab1個が消えればいい、というかそのほうが自然だと思うのです。
僕の価値観だけでしょうか。

でも、>>269に Shift+TABを教えてもらったので、今度からはストレスがぐっと減りそうです。
どうもありがとうございました。




271 名前:265 mailto:sage [2010/05/13(木) 18:11:23 ]
>>266は私のレスではありません。

引き続きお願いします。

272 名前:265 mailto:sage [2010/05/13(木) 19:04:04 ]
>>271は私のレスではありません。

引き続きお願いします。

273 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 20:59:53 ]
>>270
Visual StudioやEclipseといった開発環境は大抵Shift+Tabで戻るよ
秀丸の場合、1文字以上選択状態にしてShift+Tabで戻る(サクラエディタも同様)

Tabキーでスペース2個とか4個とかが入力されるようにするのは
スペース派(ソースコード中にタブ文字を一切使わない)には普通のこと。
タブ文字は見る方の環境によって幅が変わってしまうので、それを嫌っている。

ただVBAは専用エディタでしか見ないだろうし、
そもそも設定変更できないのがひどいのは事実

274 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:05:50 ]
あのエディタでリドゥのつもりでCtrl+Yを押すと悲惨な目に遭う

275 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:58:59 ]
いやならバインディングかえればいいのに
馬鹿なの?死ねの?

276 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 22:06:50 ]
死ねの?

277 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 22:46:05 ]
死ぬの?─┬――死ぬよ(死ぬ派)
.       │
.       └――死なないよ(死なない派)

278 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 07:41:41 ]
時刻の条件式について質問です。

00:15
00:30
00:45
〜〜略〜〜
03:00


みたいな時間がず〜〜〜〜と続くと想定して
これを開始の00:15から03:00までの間ループさせたいんだけど
時間と分を別々に分けて15分ずつ足して行く方法しかないですかね?

279 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 08:22:28 ]
>>278
そうじゃないの
つまり0時1時2時3時のステップと15分30分45分00分のステップを入れ子でループするんでしょ



280 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 08:25:59 ]
>>278ですけども
分けて計算すると変数多くなってしまうと思っての質問だったのですが
分けて計算するとしたら、どういう感じのループ条件式になりますでしょうか。
重ね重ねすいません。



281 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 08:27:43 ]
>>279
おおお!!納得です。
ちょっと考えてきます、ありがとございました!

282 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 12:11:45 ]
エンバグの元なのに

283 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 12:40:02 ]
配列のデータで一意のデータを出力させたいのですが、
以下の配列データが複数あるとします。

A(0) = 1
A(0) = 2
A(0) = 3
A(0) = 4
A(0) = 3
A(0) = 3
A(0) = 10
A(0) = 2

出力結果は

A(0) = 1
A(0) = 2
A(0) = 3
A(0) = 4
A(0) = 10

こんな感じにしたいのですが、どんな感じにすればいいでしょうか


284 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 12:42:08 ]
>>283
配列の全要素は0ではないです、すいません。

A(1) = 1
A(2) = 2
A(3) = 3
A(4) = 4
A(5) = 3


285 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:00:10 ]
>>283
配列をソートして前と違うものを取り出せばよい。
あるいは最小値と最大値が極端に離れてなければBoolean型の配列を
Redim FLG(最小値 To 最大値) As Boolean
のように用意して、ループを回しながらフラッグをたて、フラッグが
立っているものを取り出してもよい。
数値にDictionaryを使うやつはアホ。

286 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:05:51 ]
すまん、上はフラッグが立ってないときだけ取り出すの間違いね。

287 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:11:59 ]
Dictionaryを使えばいい

288 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:13:21 ]
>>285
配列のソートって出来るのですね。
フラッグはちょっと難しそうでしたので配列ソートの方を参考にさせて頂きます。
調べてる時Dictionaryというのも頻繁に出てきたのでこれも調べてみます。
レスありがとございました!

289 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:18:27 ]
馬鹿の一つ覚えのDictionaryがやっぱり出てきたかw

290 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:25:01 ]
Dictionaryの何がいけないか2行で説明してくれ



291 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:25:29 ]
え?Dictionaryダメなの?

292 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:31:43 ]
Dictionaryダメっていうやつはカルト宗教にはまりやすいタイプ

293 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:32:51 ]
ダメって書くなら根拠書いて欲しい。
言いっぱなしは迷惑。

294 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:35:29 ]
うるせーDictionaryっていっぱい連レスするんじゃねーよ

295 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:37:59 ]
>>290
二行も必要ないなw
アホだからだよ。

無理やり二行で書くと
何で単純な整数にハッシュが必要なんだってことだな。
ハッシュなんて文字列に使うものだぞ。

296 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:48:13 ]
そもそもDictionaryがどういう実装しているか知らないが、
(少なくともCollectionよりは効率がいいはずだが)
整数値は整数値をそのままハッシュ値にすればいいでしょ。

ていうか、そんなんでDictionary否定してたの?

297 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:56:03 ]
ダミだこりゃ。
お手上げだね。

298 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:05:17 ]
なるばくDictionaryを多く使ったほうがいいよ

299 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:08:51 ]
何にでもDictionaryの人って大和の吊るし柿みたいに味のあるコードを書く人多いよね。

300 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:19:11 ]
正直Dictionary回避してまで手に入れたいものって何?



301 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:26:17 ]
インタプリタでソートしたりなんかしたりして遅くなるより
ネイティブなDictionaryでやったほうがいいね

302 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:35:57 ]
ほんとアホばっかだなw
>>299
そういう皮肉は今の人には通じないって。

303 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:48:09 ]
場合によって使い分けるのが一番

304 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:58:02 ]
VBA関係ないし

305 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:11:00 ]
Rangeオブジェクトについてなんですけども、
複数モジュールがある中で共有して扱わないとエラー出てしまったので
subとかが書かれてるよりも一番上(グローバル宣言?)にしたらエラーが出ませんでした。

これって外道ですかね?

306 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:16:12 ]
何の話ざんしょ。もっとわかりやすくしてね。

307 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:35:00 ]
Rangeオブジェクトの変数についてですけども、Moduleが1〜3あったとします。

Module1
Module2
 dim aaRange as Range
 call ユーザ定義関数(aaRange)
Module3
 ユーザ定義関数(aaRange)記載


上記のようにModule2でRangeオブジェクトを宣言し、ユーザ定義の引数で貰ってるとします。
頻繁にユーザ定義関数を実行するのですが、aaRangeの値を常に保持していたくてグローバル宣言(呼び方あってるのかな)
してしまったと言う訳ですが!!!

糞設計でしょうか!!

308 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:37:23 ]
うんkです

309 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:45:36 ]
デナオシテキマス

310 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 14:27:47 ]
16進数苦手。

イミディエイトウィンドウで
?hex(50000)
だと
C350
と出ます。

でも
?&hC350
だと
-15536
と出ます。

何で??
50000に戻したいのに・・・。

因みに
?-15536=50000
False
?hex(-15536)=hex(50000)
True
と出ます・・・。



311 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 15:50:46 ]
>>310
50000はIntegerの範囲に収まってないのにIntegerに変換しようとしてそうなる
?&hc350& でLongに変換すればちゃんと50000になる
最後の&はLongを表す文字な


312 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 08:04:24 ]
エクセルVBA開発のコーディングルール作ってるんだけど、意見聞かせて欲しい
ちなみに、会社で後任に引き継ぐのを想定してるだけなんで、ガチガチにする必要なし

みなさん設計する時どんなことに気をつけてます?

313 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 09:18:42 ]
元々緩やかな下降線にはあったけど、人が減った事によって
それまでは人混みに隠れていた工作員の存在が目立つようになったのが致命傷だったな
工作員の誘導を嫌って参加者が減り、他所からの工作員を排除しようとして規制をするから
参加機会が奪われて更に参加者が減るという負のスパイラルにおちいってる

314 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 09:32:43 ]
>>312
関数の引数は基本的にByValにするとかかな。
速度的にはByRefが望ましいんだけど。(特に文字列)

Option Explicit強制とか、
空文字の代わりにvbNull使うとか、
$バージョン関数があるなら$バージョン関数使うとか、
改行文字の種類も揃えたほうがいいかも。

変数名のつけ方をシステムハンガリアンにするなら
統一したほうがいいね。

315 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 12:41:57 ]
Option Explicit以外、何一つ共感できない

316 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 12:45:34 ]
>>315
俺もそう思った

317 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 12:47:19 ]
なるほど
空白よりvbNullで統一したほうがいいな
そういやOption Explibt忘れてたわ……入れとこう

命名規則はアプリケーションハンガリアンにする予定
触る人のレベルなんかわからないし、プロジェクトごとの理解をまず深めて貰わないといけない
頭文字のみ大文字、単語ごとにアンダースコア、2バイト禁止
変数・プロジェクト名が長くなるから、頭文字大文字が必須になる

自分で慣れてないから書き換える手間が半端ないっていう

318 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:32:40 ]
・VBA禁止


319 名前:314 mailto:sage [2010/05/17(月) 13:35:57 ]
>>315-316
共感するしないじゃなくて、具体的な案とか意見書いてくれ。
問題点があるならそれもよろしく。

320 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:36:32 ]
なぜそこまでしないといけないんだ



321 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:37:57 ]
共感できないというなら理由ぐらい示せってだけだよ。

322 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:43:49 ]
めんどくさい

323 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:46:18 ]
役に立たないなあ…

324 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:51:31 ]
別に役に立ちたくないし

325 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 14:00:39 ]
>>315
俺もそう思った

326 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 15:47:24 ]
>>315
私もそう思うわ

327 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 18:47:47 ]
共感とか意見とか議論とか以前にルールに作るのになんかない? って質問に答えてるのが>>314だけじゃねえか
人のレスにいちゃもんつけるくらいしか出来ねえのか三流プログラマども




俺も>>315には共感するけどそれはそれとして

328 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 20:03:33 ]
関数の前には必ず説明のコメントを書く。書式も統一して、検索しやすいようにする
何より

手段と目的が逆転しないように気をつける

329 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 20:18:20 ]
変数名は大文字で始める?小文字で始める?
システムハンガリアンとかいうのは小文字だよね?

330 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 21:42:31 ]
Dim hoge$ と書くか Dim hoge As Stringと書くか



331 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 22:47:17 ]
普通は小文字で

332 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 23:08:56 ]
大文字にしておくと、小文字で打ったときに自動訂正してくれる
だから大文字含めた変数名にしておくと、タイプミスが少なくなる

333 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 23:43:45 ]
小文字の変数名にすると、ある型の名前を変数名にしてしまったときに
型が勝手に小文字になって困ってしまう
例えば、rangeとかdateとかを変数名にすると、全体的に型のRangeが
勝手にrangeに変わってしまう
なんとかならないんだろうか

334 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 00:04:23 ]
VBAはシンボルを大文字小文字で区別しないんだから気にしなけりゃいいんじゃね
あとはかぶらない名前にするか

335 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 05:45:44 ]
>>332
Option Explicitとか宣言の強制使え

>>333
システムで宣言済みの名前を使うな

336 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 07:56:22 ]
予約後を変数で使おうとする気持ちがよくわからない。

337 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:04:48 ]
特定の型の名前を予約語とは言わない。

338 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:26:09 ]
特定の型の名前を(ry

339 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:41:53 ]
Javaの場合なんだが、Eclipseとかの代表的なIDEは、変数の名前補完のデフォルトが
クラスの小文字名だよ

340 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 12:23:32 ]
その人の行動は「プライバシー問題に関して無頓着」で一貫しているように
見えるので理解してもらうのは難しいと思う。新しい概念を習得してもらうには
少々歳を取りすぎている。掲示板にもらった手紙の全文を掲載した時点で
気が付くべきだったのかも。
「プライバシー問題に関して無頓着」な人は親しくない相手にも平気で年齢や
職業を尋ねる傾向があるようなので注意したほうがいいです。



341 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 12:24:23 ]
>>335
デバッグするまでスペルミスのリスク抱えてろってのか?
タイプミスじゃなくて思い違いだったりすると、毎回変数名間違うことになる
一ヵ所ならまだしもデバッグ時に複数箇所とか煩わしすぎ

頻度の少ないコードとか気付かなかったり、確実にデバッグ出来るってわけでもないし……

342 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 13:47:54 ]
日本語最強。

Dim 氏名 As String

343 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:21:21 ]
2バイト表記はエラー起こす処理がMS公式であったはず
なんだか忘れたが、2バイト名関数を呼び出した時いらない参照呼び出して不具合引き起こしてたような
対応する気ない見たいだから、でっかいシステム組むのにはエラーでる覚悟はしとくべき

344 名前:315 mailto:sage [2010/05/18(火) 16:38:12 ]
・関数の引数をByValにするのかByRefにするのかは、関数の仕様による。どちらかに決めうち
 するような性質のものではない。
・空文字列とvbNullは同じものではない。VarType()してみればわかる。
・いちいち$バージョンの関数があるかどうか調べるのはめんどくさいので使わない。
 そもそもmid()とmid$()とかは別物なのか?とかいうのも調べるのがめんどい。
・改行文字の種類も揃えたほうがいいかも <= 意味不明。vbCrLfを使いましょうってことだとしても、
 別にそろえる必要性を感じない。
・システムハンガリアンは使わない。

345 名前:315 mailto:sage [2010/05/18(火) 16:40:05 ]
ちなみに、俺が昔作ったVBA用コーディング規約で、

「変数の定義はできるだけ遅くやる(使用する行/ブロックの直前でやる」

と決めたら、誰一人共感してくれなくて、驚くほどの反発があったことを思い出したよw

346 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:49:53 ]
コーディング規約というかコーディングガイド的なものとして、こんなの提示したことあった。
・アーリーバインドをなるべく使う
・イベントプロシージャの中に処理を直接書かない
・変数は一行一個で宣言しろ
・Publicな関数はPascalCaseで
・Const使え

こんな感じだったか。

347 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:51:59 ]
あ、そうそう、俺はシステムハンガリアンも使って良い派で、使うならfrmとかを決めてた気がする。

348 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 19:47:42 ]
文字列をByValで渡した時って、先頭のポインタが値渡しされるの?
それとも、文字列全体がまるまるコピーされるの?

349 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 20:40:23 ]
参照渡し プロシジャに値を渡す時、値そのものではなく、値が格納されている
変数のアドレスを渡す
呼び出し先のプロシジャで引数として宣言している変数の値を変更する
と、その引数に指定している呼び出し元の変数の値も変更される

値渡し プロシジャに値を渡す時、値そのものをコピーして渡す。
呼び出し先のプロシジャは、渡された値のコピーを受け取るだけなので
呼び出し先のプロシジャで引数として宣言している変数の値を変更して
も、呼び出し元の変数は一切影響を受けない。

だったかと

350 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:15:22 ]
>>349
で、ポインタの値渡しなの?中身の値渡しなの?



351 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:18:55 ]
>>350
コピーされる。
ちなみにVBの文字列の型はBSTR。
先頭に文字列長、末尾にヌル文字のUTF16文字列だったかな。

352 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:27:09 ]
手元の本によると
プロシージャの引数の文字列がコピーされるのは以下のタイミング。

・ByRefだと文字列定数を渡した時
・ByValだと常時

もちろんポインタのコピーじゃなくて文字列をフルコピー。
VBの文字列はImmutableじゃない。

353 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:52:10 ]
>>351-352
ありがとうございます。
VBAについてそこまで深く書いてある本もあるんですね

354 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:27:49 ]
>>344
・引数にByRef|ByValを指定しなければByRefになる。
 アホが引数を書き換えるとわかりづらいバグに発展する。
 普通の関数であれば値渡しでいいはず。参照渡しを積極的に使う場面は少ない。
・ごめん。vbNullじゃなくてvbNullString。
・$・非$関数は別物。$じゃなければVariantが帰ってきている。
 普通はVariantには用がないはず。作者も$の方使えって言ってる。
・それならばvbCrLfとvbNewLineどちらを使うのか。
・システムハンガリアンはどうでもいいや。


355 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:35:57 ]
作者って誰だよ
VBの作者か?

356 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:44:19 ]
厳密にいうとVBにIntelliSenceつけたチームの中の人だな。

357 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 23:13:14 ]
VBEの自動構文チェックって邪魔にしか思えないんだが、あれが便利で使ってるって人いる?
なんであんなものがあるのか不思議でしょうがない

358 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 23:21:43 ]
どっかのペインにちょこっとアクティブに表示してくれるだけなら
便利な機能だけどダイアログで出るのが最高にウザいよなw

359 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 11:30:50 ]
>>354
普通の関数であれば参照渡しでいいはず。
値渡しが必要な場合にのみByValを使え。

360 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 11:35:47 ]
midとmid$のパフォーマンス気にする奴が、常にByVal使えとか笑えるわ



361 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 11:59:22 ]
まあそれもそうだね。
ただ、両バージョン混在してるなら$にしろって言うけどね。
参照渡しは本当に理解してないのが多い(特にCとかJavaとかの人)

362 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:00:52 ]
俺はかっこ悪いから$とかつけない
ByValもつけない

363 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:04:27 ]
変数宣言とか関数宣言だと使うよ。
いちいちAsなんて書いてられない。

364 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:11:17 ]
兎に角、統一してあればそれでいいや

365 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:23:27 ]
Typename(Mid("a",1,1))ってやるとStringって言われるんだけど、
実際はVariantだってのはどこ見ればわかるのか知りたい。

366 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:25:02 ]
第一引数を数値にしてみたけどやっぱり戻り値はStringだなあ
?Typename(Mid(123,1))
String

367 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:34:42 ]
そもそもTypeNameってVariant自体は表示しないでしょ

368 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:41:11 ]
>>364
なんかネット上に書いてありそうだけど、この本見てね。

Welcome to PowerVB
www.powervb.com/

369 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:11:03 ]
midとmid$の差なんて、100万回実行して0.1〜0.2秒位の差しかないよ。
その程度の差が利いてくるほどの計算量が必要な処理なら、そもそもVBAで
やるのがどうかという話もある。
まぁ一般プログラマは気にしなくて良いレベル。

370 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:20:40 ]
Mid$()って、MS BASICあたり位からの互換性のためが主な目的な気がする。
そんな細かいことより、文字列の連結方法を教えといた方がいいよね。



371 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:21:29 ]
連結方法ってカッコ付ける奴かな。

372 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:34:17 ]
>>368
何書いてあんの?
何を読ませたいの?
英語の勉強からするのも面倒だし
ネットに書いてあるとか言うの教えてよ

373 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:38:34 ]
>>371
多分このこと。
support.microsoft.com/kb/170964/ja

374 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:44:53 ]
別にvbCrLfとvbNewLineが混在してても気にならない。
けど、普通はどっちか一つしか使わんだろ。気分でvbCrLf/vbNewLineをごちゃまぜに使うような奴なら、プログラマ
としての素質を疑うよな。
プロジェクト全体として(というほどの大きなプロジェクトがVBAで構築されることがあるのかどうかは知らないが)、
統一されてなくてもかまわんよ。

例えば、CでいちいちNULを'\0'と書けとか言われたら切れるな。0で済むところは0で書くし。
0と'\0'が混在してても気にならないし、0とNULLが混在してても気にならない。

375 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 14:01:05 ]
上で出てた参照渡しについて
引数として用意した変数に格納してから渡したほうがいい?

call 処理(変数)



引数 = 変数
Call 処理(引数)
変数 = 引数

376 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 14:14:00 ]
>>375
こんなレベルの奴がいるなら、基本ByValで渡せというのもうなずけるな。

377 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 15:17:35 ]
なに一人で戦ってるんだ?
手を貸してやろうか?

378 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:07:10 ]
いつもながら、誰がどの発言なのか良くわからずぐだぐだ

379 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:25:10 ]
俺も>>314を支持する派に転向するわw

380 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:54:16 ]
constさえあれば良かった。



381 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:15:06 ]
じゃあ俺も314で

382 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:31:06 ]
>>375エスパーすると

Q:
hoge1,hoge2,・・・hogeN
それぞれ何度も演算したり入れ換えたりした後に関数を呼び出し
関数の中でも同じ変数名でスパゲッティ大盛り
引数のhogeA,hogeBを間違えて渡した時の修正コストが半端ない
だから呼び出し前にそれぞれ変数に値を入れておけば、その部分だけ修正すればいい
よって>>375ですか?

A1: つ 参照
A2: つ 規約
A3: そんな時は大抵他の場所でも入れ違いがあるんじゃね

383 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:52:06 ]
VBAコーディング規約は、こんな項目を含めるといいかも。

・Option Explicit必須
・デフォルトコントロール名(Text1など)の使用禁止
・伝統的なループ変数(i, j, k, ...)以外の一文字の変数名禁止
・ByVal/ByRefの省略禁止
・変数宣言/定義時は、Variantであっても必ず型名を付ける
・一行の「If ... Then」禁止
・Goto/Gosub禁止
・IIf禁止
・Call禁止(書くな)
・While ... Wend禁止(代わりにDo ... Loopを使え)
・$付き関数がある場合はそれを使え
・「=""」「<>""」の代わりにLenBを使え

384 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 18:50:33 ]
>>383
>Goto/Gosub禁止
On Error は除いてくれ

Call禁止 反対 サブプロシジャ呼び出しであることを明確にしたい

385 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 19:16:01 ]
>「=""」「<>""」の代わりにLenBを使え

俺普段=””使ってるわ。。。

386 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 19:59:17 ]
Integerを使わずLongを使え、というのを足しても良いかもな。

387 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 21:25:40 ]
足してもいい。Integerが32bitだと思ってる厨房が多い。

388 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 13:53:14 ]
VBAでオセロでも作ってみようと思うんだけど、まったく分かりません
要点としては
@ゲーム開始ボタンを押した後、盤目をクリックしたら駒を描写する所
A一度置いたところにもう置けない判定
B駒を挟んでひっくり返す判定

どうかご教授ください

389 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 14:03:49 ]
>>388
1. Cells(2, 2).Value = "●"
2. If Len(Cells(2, 2).Value) > 0 Then Debug.Print "おけない" End If
3. Cells(2, 2).Value = "○"

つか、VBAじゃなくて他の言語でオセロ書けるのかよ?

390 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 21:16:48 ]
セルの数字を文字列に変換するマクロを考えていますが、この場合は元の数字に「’」をつける
形で良いのでしょうか?それともCstr を使用した方が適当なのでしょうか? 



391 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 22:00:31 ]
>>385
> >「=""」「<>""」の代わりにLenBを使え
>
> 俺普段=””使ってるわ。。。

おいらも。こっちのがタイプ量少ないし。
LenBだといいことあるの?

392 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 22:01:28 ]
>>390
セルの書式を文字列にすれば?

393 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:07:16 ]
>>391
Len 6命令 <=> LenB 5命令
ちょっとだけお得。
これよりもうちょっとコストが付くのが空文字列の比較。
速度で言えば、LenBが最速。

394 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:20:39 ]
>>390
Cells(2, 2).Value = Cells(2, 2).Value + ""

395 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:42:12 ]
>>394
Cells(2, 2).Text & ""

396 名前:391 mailto:sage [2010/05/21(金) 00:02:51 ]
>>393
なるほど。性能か。シビアな場合もあるのかもね。
文字列連結も+使うんじゃなくて領域確保した上でMid()使えとか。

おいらはとりあえず性能関係シビアな用途に使っていないし「= ""」 で良いや。

397 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:26:48 ]
>>396
普段使うVBAなんて最速で書けた方が偉いからね。

398 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:46:22 ]
差が出るほど大規模なプログラムをVBAなんかで書くのか…

399 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:56:18 ]
If文書いてて条件の否定を付けるために
カーソル移動するのがめんどいから
Xor Trueなんて行末に書き足すのは俺だけでいい

400 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:06:42 ]
>>398
プログラムの規模じゃなくてデータの規模が問題なんだよ。



401 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 10:49:32 ]
>>383
DoUntill...Loopもだめ?

402 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 14:42:26 ]
>>398
ループ内で、普通に文字列連結とかしてたら死ぬときがあるよ

403 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 11:52:57 ]
文字連結で何故死ぬの?

404 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 12:05:08 ]
>>402
これ書いたのだれ?もしかしておれ?

405 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 13:04:22 ]
多分このこと。
support.microsoft.com/kb/170964/ja

文字列連結は、需要が多い上に意外と時間がかかる。
何も考えずに作ると処理が死ぬほど遅くなる。

406 名前:デフォルトの名無しさん [2010/05/22(土) 16:35:49 ]
すいません、しょうもないことと承知で質問します。
xlnoneとは何をするのでしょうか?

407 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 17:17:17 ]
何もしない
ただの書式設定のプロパティ値

罫線描画を線無しにする時とかにプロパティをこれに設定する

408 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:00:46 ]
Listviewのリストは、縦には出せないのでしょうか?

409 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:13:44 ]
わかりづらかったですね。
Listviewは、縦スクロールにならないのでしょうか?

410 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:22:26 ]
変数の規約について
例えば出勤日リストの行を定義する変数名

Shukkin_row_count_
ってするより、

S_r_c_ ' Shukkin_row_count_
としたほうが、タイプミスや誤読が減って設計コスト下がるよね
むしろアンダーラインなくして頭文字を大文字で対応すべきかなあ

コードが長くなると変数の意味が散逸しかねないけど……



411 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:45:34 ]
そんな意味ならコメントは日本語でよくね?


412 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:55:31 ]
>>410
ワケ判らん変数名は付けるな
下手に短い名前なら意味が判る長い変数名の方がよぉ〜っぽど良いわ、ヴォケ



413 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:09:26 ]
問題は長い短いじゃなくて俺の命名センスにあるのかな
300行くらいの短いコード書いてみたが、変数名省略しなくても慣れたらすらすら書けた
コメント部分が200行くらいになったが


>>411
うん、コード書く時は日本語コメントは当然付ける
それに追加で、省略前の変数名明示ってことで

414 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:09:28 ]
他の項目にS_r_o_とかあったら死ねるな。
COBOLに侵され気味な俺だと、
SHUKKINrowCountかSHUKKIN_rowCountって感じかなあ。
ベタローマ字は全て大文字というのが俺的基本法則。

415 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:22:55 ]
俺ならVBAとC#では気にせず変数名や関数名に日本語使う
それで可読性や開発効率が上がるなら別にいいじゃんてスタンス

416 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:30:18 ]
>>413
その省略前の変数名という考え方がわからん
s_r_c_'出金の行数
とかでいいと思ってしまう

417 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:26:49 ]
S_r_c_と言う記号で見るのと
Shukkinn_row_count_と言う意味で見るのを比べれば、
保守する時の可読性、認識レベルが異なる

だから逆に、接続を長くして意味を持たせるか、後で読み返した時の読みやすさを高めるために省略するかで迷ってる

日本語変数を使うってのが両方満たして楽なんだが……予期しないエラー引き起こすリスクもある

418 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:30:35 ]
母音省略でいいよ。
sknRowCnt


419 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:32:35 ]
あれ、回答レスになってないな?
省略前って言うのは、今Shukkinn_row_count_って変数があるけど、これをS_r_c_に省略した場合
ってことで使ったんだが、↑のように保守作業時に変数の意味を理解させるって側面もある

420 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 01:23:02 ]
ソースは他人が見てわかるように書くべし
そして「明日の自分は他人」

結論。好きにしろ



421 名前:sage [2010/05/23(日) 23:37:36 ]
すみませんが、どなたか教えていただきたいことがあるのです。
エクセル2003でADOを用いてアクセス2003のデータを抽出したいのですが、
抽出条件で「・・・を含む」としたいのですが、上手くいきません。具体的には

.Source = "SELECT * FROM テーブル1" & _
" WHERE 日時>=" & 開始日 & " AND 日時<=" & 終了日 & _
IIf(Range("B10") <> "", " AND 依頼者='" & Range("B10").Value & "'", "") & _
IIf(Range("B12") <> "", " AND 項目='" & Range("B12").Value & "'", "")

となっておりまして、テーブル1というアクセスのテーブルから、日時と依頼者と項目を完全一致で抽出することはできました。
この中から依頼者と項目に関して、「・・・を含む」条件にしたいのですがLIKE演算子等入れても上手くいきません。
どなたか教えていただけますでしょうか。

422 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:40:15 ]
>>421
SQLの問題というなら

SQL質疑応答スレ 9問目
pc11.2ch.net/test/read.cgi/db/1252492296/l50

若しくは同じデータベース板のAccessスレ(あるのかどうかは知らん)へGo !

423 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:46:23 ]
>>421
上手くいかないとき、Sourceにどんな文字列が入っているのか出力して見てはいかが?

424 名前:421 mailto:sage [2010/05/23(日) 23:53:16 ]
>>422
問題はSQL何ですかね?だとすると手がつけられません。

>>423
デバックしたときに見た文字列は上手くいっていました。
ということは外部データの取り込みではLIKE演算子は無理なのでしょうか・・・


425 名前:デフォルトの名無しさん [2010/05/23(日) 23:54:57 ]
むり

426 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:00:03 ]
あれ?できなかったっけ?

427 名前:421 mailto:sage [2010/05/24(月) 00:05:18 ]
たとえば
IIf(Range("B10") <> "", " AND 依頼者='" & Range("B10").Value & "'", "") & _
のところを、
IIf(Range("B10") <> "", " AND 依頼者 Like'%" & Range("B10").Value & "%", "") & _
へ変えてみても上手くいきませんでした。
もしかして書き方が間違ってますか?

428 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:14:13 ]
>>424
デバッグで見ただけでは分かりにくいエラーは有るよ
俺はSQL文をテキストファイルに出力するプロシジャを作って
別途確認する様にしてる w



429 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:18:14 ]
>>427
Value & "%" の%の後ろのシングルクォートは?
あと一応Like演算子と文字列の間にスペースを入れようか。
それとセルの内容エスケープしてないのはわざとだよね?

430 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:25:43 ]
マンドクセだから確認してないけど
先に抜き出す条件を文字列でSQLにぶちこんでみ
それで出来ないなら構文かデータベースチェック



431 名前:421 mailto:sage [2010/05/24(月) 00:28:19 ]
できました!。皆さんありがとうございます。
特に>>427さん
大変ありがとうございます。
恥ずかしながら、後ろ側のシングルクォーテーションが必要とは知りませんでした。
また、Likeの後にスペースを入れていないことも原因のひとつでした。(本当に情けない。。)

>>427さん
後学のため教えていただけますか?
>それとセルの内容エスケープしてないのはわざとだよね?
具体的にはどういったことでしょうか?


432 名前:421 mailto:sage [2010/05/24(月) 00:30:22 ]
興奮してレスを間違えました。
429のレスは427ではなく>>429さんへのレスでした。

433 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:32:44 ]
>>431
エスケープっていうのはたとえば、Range("B10")の内容に
シングルクォートが含まれていたりしたらSQL文として
文法エラーになるよ、っていうだけの話。
Like '%'%' みたいになったらシングルクォートの閉じ位置が
変わるので文法エラーになる。

まあ、自分で使うツールってだけならあんまり気にしなくていいよ。

434 名前:421 mailto:sage [2010/05/24(月) 00:40:20 ]
>>433
なるほど・・・
たしかにそうですね。勉強になります。
今回は時間の都合上、運用面で対処したいと思いますが、
今後はそういったことを含めて構築していきたいと思います。
とにかくありがとうございました。

435 名前:デフォルトの名無しさん [2010/05/24(月) 08:17:43 ]
D-SUB9ピンのRS-232Cで接続するバーコードリーダーから文字列を入力する方法を教えてください
TELNETで認識するところまでは出来たのですがそこまでしか出来ませんでした

436 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:00:54 ]
だれかイミディエイトウィンドウを画面右側にぴったりフィットさせる方法を教えてくれ。
前はいろいろいじくってたらなんとかできたんだけど、今どうやっても上手くいかない。

437 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:22:38 ]
しばらくここ読んでなくて乗り遅れたが、空文字の代わりにvbNullStringって書いたやつ誰だよ。
どういう場面を想定したか知らんがrange("a1").value=vbnullstringなんてのは間違いだよなぁ。

438 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:25:46 ]
2ch もう終わってるね

439 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:30:59 ]
そんなことを言う人は破門です

440 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:48:26 ]
LenBがLenより速いとか書いたやつもしっかりString型の時と書かなきゃいかん。
Excelでよく使うVariant型では逆になるぜ。




441 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:53:23 ]
>>435
VBみたくAPI使えばいいんでね


442 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 10:05:25 ]
436
ぐっとしてきゅって右下にばっする

443 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 10:18:36 ]
>>440
くどくなるので必ずこうしろと言うわけではないが、Variant型の2次元配列の
各要素の型が何型か判定する場合が多いと思うが、判定して文字列だったら
String型の一時変数に格納して処理した方がベター。
そうすればLenBが確かに速い。
数値などの他の型でも一時変数に移した方がいいのは同じ。



444 名前:436 mailto:sage [2010/05/24(月) 10:26:51 ]
>>442
d
でけたぜ!
右下にってのがコツなんだな。


445 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 11:04:44 ]
正直、=""とかLenBとかにこだわってるのはほとんど無意味だぜ
そんなの、長い文字列を連結したり、RangeのCopyメソッドを使った瞬間に
無意味になる

446 名前:デフォルトの名無しさん [2010/05/24(月) 14:06:07 ]
Public Type A
ID As Integer
Name As String
End Type

Public Type B
ID As Integer
Name As String
ByRef A As String <-ここでエラーが出る
End Type

Sub main()
Dim TableA() As A
Dim TableB() As B
・・・・
End Sub

TableBでTableAのメンバーの一つを参照させたいのですが、上記のような記述だとエラーが出ます。

構造体のメンバーに参照(ポインタ)を使いたいのですが方法はないものでしょうか?


447 名前:436 mailto:sage [2010/05/24(月) 16:53:58 ]
>>447
文字列の連結に単純連結がいけないのはほとんどの人が知ってるだろ?
あとはいかにスマートにMidステートメント使うかが腕の見せ所。
まぁ今はバカでも使えるJoinがあるので楽になったけどな。

448 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 19:01:08 ]
単純な文字列連結にこだわりすぎるやつも馬鹿だな
文字列連結なんて大抵は短い文字列同士の連結にしか使わず
さらに回数もたいしたことないのが普通なんだから
その辺をわかってて使うなら普通の簡潔な記述の方が優れてる

449 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:19:31 ]
>>448
んなこたー当たり前。
回数の多い例が出てたんでね。
こんなのほとんどの言語で共通だと思うが、未だに知らない人もいるみたいなんでね。

450 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:34:22 ]
長さ0の文字列かどうかならLenとかLenBの方が""と比較するよりいいかも知らんが、セルが空白かどうかを調べるだけならIsEmptyが一番軽いだろうねぇ。
俺は大体""と比較するけどな。



451 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:12:41 ]
そういうチマチマした高速化の技術はどうでもいい
高速化で本当に困るのはそんなところじゃない
上で出てた文字列連結の知識や、valueを配列に一気に出し入れする技、
WorksheetFunctionを使う技などをまず覚えるべき


452 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:38:03 ]
>WorksheetFunctionを使う技

意識したことないけど、これどんなん?

453 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:43:02 ]
>>451
そんな低レベルな話してもしょうがねぇなぁ。
お前の文字列連結を手直ししてやるからここで書いてみ?
A1:A60000の値をカンマで連結するコードを書け。
ただし

454 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:44:24 ]
おっと途中で送信したぜ。
ただしJoinはなしな。
これは猿でもできるから。

455 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:44:49 ]
高速化言うんならCとかでDLL作って呼び出したらいいんじゃね
VBAですることじゃない

456 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 06:08:39 ]
何で書こうと回数の多い連結を単純に連結しては駄目だわな。
以前VBAを馬鹿にした酔っ払いSQL厨がいたが、アルゴリズムも知らない馬鹿だったぜ。

457 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 08:09:07 ]
>>453の素晴らしい回答にご期待ください。

俺は猿でもできるJoin使うけど。

458 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 08:54:57 ]
適当に

A6000までコピー
クリップボードから変数に抜き出し
Replaceでvblfを,に変換
書き出し

そこそこ早いかな?

459 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 08:59:05 ]
>>456
回数だけではない
どちらかというとむしろ、文字列が長いかどうかが重要だな
回数というのもどちらかというと、「ペース」と置き換えるべきだし

460 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 09:15:49 ]
連結してねえw



461 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:02:35 ]
A60000だった
列Aでもいいな

462 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:46:29 ]
お前と連結したいよ

463 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 11:47:36 ]
ウホッ

464 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 12:24:32 ]
プログラムとしては面白いが、解答としてはどうなの
実際に文字列連結する場合、配列でもなんでもいいけど書き出してからその処理するのは流石に時間かからないかな
見てないけど

465 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 12:48:58 ]
もう連結ネタ飽きたのでそろそろ別のネタ始めてクレクレ

466 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:07:40 ]
ネタも何も質問スレなんだから質問ありきだろ

467 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:10:42 ]
素直にJoin使えばいいのに、禁止する意味がわからない
何がしたいの

468 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:16:14 ]
任意の型の空の配列を作成する方法ってありますか?
String型ならSplit()で行けるし、Variant型ならArray()でいけますが、
他の型はどうやって作成すればよいでしょうか?

469 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:26:26 ]
>>458
DataObject使うのか?
でもReplaceが遅いからなぁ。
試しに
A1
A2
.
.
A599999
A600000
と2文字〜7文字の60万セルでやってみたら2.8秒だったぜ。
DataObjectとSplitとJoinの併用でもほぼ同じ。
一方Midステートメントは0.6秒。
ループ回して一次元配列に移してJoinは微差でMidステートメントに負けるようだが俺ならJoin使うな。
なんたって楽だからな。


470 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:34:18 ]
上は連結文字列の作成だけで書き出しは入ってないからね。



471 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:15:37 ]
60万行じゃなく6万行でやってみたら>>458のDataObjectが一番速いな。
Dictionaryと似たような特性だな。
数万データならそこそこ速いが数十万になるとウンコってやつ。

472 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:32:17 ]
で、結局どんな答えを想定してたんだ?

473 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:38:05 ]
クリップボード経由で数百万語を一変数に押し込む処理ってCPUとメモリに依存しそうだが

474 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:51:12 ]
まだまだCPUやメモリは速くないなと思ってしまった。

475 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 23:27:54 ]
思いつきで書いただけだが、「エクセルVBAテクニック」としてなら有りな感じ?
限定条件下になりそうだけど

476 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:40:46 ]
>>458はvbLfじゃなくvbCrLfだな。

477 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 17:00:12 ]
Mid$とclsConcatenate使って、
vbCrLfは10と13だから、SelectCaseでそれぞれ処理し、
2文字ずつカウントする

……と、多分こういう解答を求めてたんだろうか

478 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 20:43:51 ]
Mid$以外使う必要がないでしょ
clsConcatenateってなんだろうと思って検索したら
独自に作ったStringBuilderもどきがひっかかった
もし、そういうのを使うならclsConcatenateだけでいいし
vbCrLfでSelect Case云々言ってるのは、なんでそんなことをしてるのか
ちょっとわからない

479 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 21:03:22 ]
初歩的なことなのだが教えて欲しい。
Public変数は、プロシージャの処理終えると値消えてしまうのか?

480 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 21:12:04 ]
基本的に残るけど、一定のタイミングや、
Endステートメントを実行すると初期化されなかったっけ。



481 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:26:59 ]
>>479
VBAの処理が終わったあとで変数の内容を見るには、イミディエイトウィンドウで?
たとえば変数aの値を確認したければ?a[Enter]と入力すればいい
ttp://f12.aaa.livedoor.jp/~itatisa/phpup/cgi/src/up9840.png

変数がクリアされる条件は、Endを実行した時(End SubやEnd Functionではなく単独のEnd文)
エディタやマクロの記録などでVBAを書き換えたとき

482 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 23:35:58 ]
VBAの本でいい本ってある?
なんか、サンプル載せましたよ
みたいな本ばっかりで、このスレに書いてあるようなことが載ってる本
見たこと無いんだけど

例えば、>>481に書いてあるようなこととか、つい最近話題になった
文字列連結のことだとか、そういうことすら、書いてある本を
ほとんど見たことがない

483 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 23:41:14 ]
フェイタンと師団長だったら、別に師団長が強烈な発を持っていなくても
勝負はわからんよなw

484 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:11:27 ]
最近かってためになったのは
ExcelVBAスキルアップテクニック
Excelプロフェッショナルエンジニアテクニック
かな

485 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:26:31 ]
>>482
VBAはVB6と言語としては全く等価だから
VB6で探したほうがいいね。

486 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 05:20:36 ]
>>480-481
なるほど。Endで消えてしまうとは、知らなかった。
ありがとう。


487 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 20:28:43 ]
これ出来ないのかな、と前から何度も思ってた事なのですが、

テキストボックスとテキストボックスなら、図形の矢印で結ぶことができて、
片方のテキストボックスを動かしたら、矢印の線も一緒に動くじゃないですか。

これを、
セルとテキストボックスでやることは出来ないのでしょうか?

つまり、テキストボックスから、矢印を延ばして、あるセルにくっつけます。
そして、どっちを動かしても、矢印で繋がったままにしたいのです。

488 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 10:02:24 ]
ttp://www.youtube.com/watch?v=ZYuIQIComPo

489 名前:デフォルトの名無しさん [2010/05/30(日) 12:41:07 ]
質問です。。
ユーザーフォームのラベルでバック半透明で文字だけをくっきり表示させたいです。
どうすればよろしいでしょうか?

490 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:55:02 ]
VBAでマウスカーソルをピクセルで指定してクリックさせるにはどうするのが良いのですか?
今はShellを使って別プログラムから呼び出してますが、処理が遅くなるので
もっとスマートなやり方があれば教えて下さい。



491 名前:デフォルトの名無しさん [2010/05/31(月) 05:10:33 ]
うんこ

492 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 08:39:22 ]
>>488
VBAで作るとすると
1.矢印の起点・終点(高さ)を取得
セルなら(i-1)までの.RowHeightの合計プラス(iの.RowHeight)/2
テキストなら位置プラス(高さ)/2
2.横位置を取得
同様に

3.左右のオブジェクト判定
セル、テキストボックスの右端位置を比較

4.1と2を元に矢印の位置設定


>>499
ラベルのプロパティ→項目別→表示
で好きなの選ぶ

493 名前:デフォルトの名無しさん [2010/06/01(火) 01:02:31 ]
>>489の質問は492で解決になっているのか??
表示の中に半透明の設定なくない?

494 名前:デフォルトの名無しさん [2010/06/01(火) 07:19:17 ]
EXCEL2003、XPsp2です。

EXCELのVBAだけを使って、インターネット(TCP/IP)通信をする
プログラムは作れるのでしょうか?
難易度は問いません。

よろしくお願いします。

495 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 08:21:24 ]
ぐぐったらフォームの半透明化が見つかった
窓側のコントロールのカスタム描画を使うAPIだな

半透明ってのがイメージ湧かないが

496 名前:487 mailto:sage [2010/06/01(火) 12:52:30 ]
ありがとうございました

497 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 17:06:19 ]
Docmd.RunSQLってマルチプルINSERT対応していますか?
DBはMySQLです。

498 名前:497 mailto:sage [2010/06/01(火) 17:19:55 ]
あ、ここAccessじゃなくてExcelでした。
すみません。


499 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 22:20:26 ]
Formulaで数式埋め込もうとすると短い式なら問題ないんだが、
複雑な(長い)式になるとTRUEを返される。
何だこれ?

500 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 22:24:10 ]
もっと色んなパターン試せばどうだろう
別の長い式作って




501 名前:デフォルトの名無しさん [2010/06/01(火) 22:46:14 ]
EasyCommっていうフリーウェアをインポートして
装置からデータをRS-232C経由で取り込むプログラムを書いたんですが、
プログラム動作中はストップキーも聞かず、入力を受け付けてくれない
ようです。これってそういう仕様とあきらめるしかないのでしょうか。


502 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 22:51:58 ]
DoEventsじゃなくて?

503 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 07:37:52 ]
真偽返すのはどっか引数が抜けてるんじゃね

504 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 11:32:10 ]
>501

んなこたぁない。

505 名前:デフォルトの名無しさん [2010/06/02(水) 20:39:09 ]
エクセル2000では動く、エクセル2007では
動かないマクロがあるんだけど。
考えられる原因ってどんなのがあるの?

506 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 21:40:52 ]
大抵は、変更とか削除された機能を使っていたとかじゃないか?
2007で旧時代の機能は大分整理されたみたいだからな。

507 名前:499 mailto:sage [2010/06/02(水) 21:57:24 ]
解決した。

結局TRUEが返される理由はわからんが、
思い通りの結果が出たのでまぁ良しとする。

508 名前:デフォルトの名無しさん [2010/06/02(水) 22:08:20 ]
>>506
そうなん?ってことは2007で動くように
作りなおさなきゃってこと?
そのまま使える方法ってないのかなぁ?

509 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:30:03 ]
ない
2003と2007はまったく別のソフトだと思った方がいい

何も全部作り直さなくても、たいていのマクロは少し修正するだけで使えるようになるはず

510 名前:デフォルトの名無しさん [2010/06/03(木) 19:45:17 ]
両方で動くようにはできないってこと?



511 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:22:43 ]
それは内容による
速度やExcelそのものの制限に関係なく、
両方で結果が同じになる関数ばかり使ってればいい

512 名前:デフォルトの名無しさん [2010/06/04(金) 06:30:29 ]
両方で結果が違う関数なんてあるんだぁ
たとえばどんな関数?

513 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 08:14:47 ]
version

514 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:34:28 ]
おおっと

515 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:06:55 ]
Versionはプロパティ

516 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:56:59 ]
WorksheetFunction

517 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:07:43 ]
エクセルver2002を使っています。
印刷設定について教えていただきたいのですが、

一枚77行で縦に任意の枚数(2枚なら77*2行)にあわせて行を77行ごと追加する
マクロがあるのですが、この作成された任意の枚数の表の印刷範囲についてなのですが、、、

表作成後に表全体を選択して印刷範囲設定しているのですが

With ActiveSheet
.PageSetup.PrintArea = Range(."表全体").Address
End With
※縮尺73%、A3、品質300dpi
プリンターの種類、印刷品質、余白の設定で印刷行数が77からずれることがあります。

【質問】
1.マクロで、縮尺はきにしないで常に77行目に印刷境界線をもってくることはできますでしょうか?
2.また、縮尺50%にしても77行ごとに印刷境界線をもってくることはできますでしょうか?

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

518 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 03:54:52 ]
ipadでExcelVBA動くようにならんかね

519 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 04:01:07 ]
>>517
77行毎に一旦別のシートにコピーして
印刷
その後そのシートは削除するとか

520 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 07:11:07 ]
>>518
つ Citrix Receiver for iPad



521 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:49:36 ]
>>517
印刷境界線ってのは何をさしてるんだ?

印刷範囲を77行までにするなら
ActiveSheet.PageSetup.PrintArea = "$1:$77"

78行の前に改ページ入れたいなら
Rows("78:78").Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

とりあえずマクロの記録でこうなった


522 名前:517 mailto:sage [2010/06/06(日) 14:03:42 ]
>>517です。
分かりにくい説明ですみません。

縦に1〜77と数字を入れたとして、次ページでまた1〜77といれる。

【縮尺100%】
1
2
3


76
77
--------改ページのライン
1
2
3


76
77
-------改ページのライン

523 名前:517 mailto:sage [2010/06/06(日) 14:05:33 ]
【縮尺90%】
1
2
3


76
77
1
2
--------改ページのライン
3


76
77
1
2
3
4
--------改ページのライン

縮尺が100→90%になったときに改ページラインがずれてしまいます。(列側のラインも同様にずれます)
また印刷の余白を変更したり、解像度を変更したりしてもずれます。
複数シートに同じような表があり、マクロで一括で体裁を整えたいのですが、

上記のようなとき、手動で改ページラインを77と1の間にもっていけば
自動的に100%になり綺麗に印刷することができます。
この時手動であれば90%のままで77行ごとにもできます。
これをマクロで印刷範囲を77行ごとにしたいのです。
※縮尺は問いません。(縮尺指定できるのであればやり方だけでも教えていただけたらと思いますが・・・)

524 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:52:35 ]
だから、77行目ごとに改ページ入れたいんだろ
>>521の後半でわからない?まったくの初心者か?
その77行ごとにデータ入れるマクロで、改ページも入れるようにすればいいだけなんだが

わからんようなら、A列から1を探してその手前に改ページ入れるマクロ書いといてやる
    Dim row
    ActiveSheet.ResetAllPageBreaks
    row = 1
    Do
        row = row + 1
        If Cells(row, 1).Value = 1 Then
            ActiveWindow.SelectedSheets.HPageBreaks.Add (Cells(row, 1))
        End If
    Loop Until Cells(row, 1).Value = ""

2007で作ってるけど、たぶん2002でも動くと思う

暗黙の型変換気持ち悪いとかいう突っ込み禁止

525 名前:517 [2010/06/06(日) 17:26:45 ]
>>524さん
ご指摘ありがとうございます。
マクロはネットで調べながら覚えたもので、勉強不足ですみません。

そして、謎が解けました!
ActiveSheet.ResetAllPageBreaks
の時点で自動で縮尺が100%になるんですね。
この後に縮尺を90%にしてから
HPageBreaks.Add
で改ページをいれてあげたらうまくいきました。

ありがとうございました。

526 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 20:12:11 ]
下記のデータが仮にあったとします。
ユーザーフォーマットを使用してコンボボックスにユーザーID(A列)を
配置し、指定されたA列のB列、C列データを呼び出し変更を加えれるようにしたいのですが、
コンボボックスとテキストボックスをどのように紐つければよいのでしょうか?

A B C 
1 犬 雄 
2 猫 雄 
3 鳥 雌   



527 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 20:35:57 ]
更新後処理

528 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:23:42 ]
アドインを2つ作りました。

中のプログラムはモジュール名から何まで全く同じで、
途中で参照するファイル(テキスト)だけが異なります。

別の業務をしている人向けに、それぞれに作ったのですが、
兼業する人が両方のアドインを追加すると、うまく動きません。

具体的には、最初に動かした方のテキストをずっと読んでしまうようです。

どこを変えれば動くようになるでしょうか。

529 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:58:41 ]
空が青いなぁ。

530 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:01:43 ]
全部同じなら中の人も見分けつかないだろうな
処理なり使ってるシステムから切り替え出来ないの?



531 名前:デフォルトの名無しさん [2010/06/07(月) 21:22:06 ]
既にシート中にある、表の中身(文字列)を二次元配列として変数に代入して
他のシートのセルに場合わけして入れる場合、どのように書いたらよいのでしょうか?


532 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:46:32 ]
Hairetu = range( , )

ループ処理
Hairetu(i,n)の条件分岐でHairetuBにでも格納

sheets( ).rante(,) = HairetuB

533 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:08:28 ]
>>532さん、ありがとうございます。
最初の変数の代入は、どのように記述すればよいのですか?
二次元配列を宣言してx(i,n)でstring型で宣言したのですが、
データ数が多いのでfor文で回して代入したいのです。、
range("A1")を代入するとしたら、for文はどうなるのですかね??

For i = 1 To 18000
For j = 1 To 18
x(i,j) = Range(i, j)
Next j
Next i
こうじゃないですよね。。

534 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:14:31 ]
Hairetu = range("A1:Z99")

535 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:47:54 ]
ありがとうございます。
すみません、最後の別シートの格納の仕方についてなのですが…
例えば、x(2,3)の内容をRange("C2")に入れるなど、所定の場所に格納
する際に、for文で回して入れる方法はあるのでしょうか?

536 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:12:48 ]
>>533
ワークシートの内容を配列に入れるには、配列を二次元のVariant型にしておけば、セルがいくつあっても一気に代入できる。
Forを使うより何倍も速いしプログラムも簡単。
String型にしてしまうとFor〜Nextを使うような遅い方法しか使えなくなる。

537 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:14:50 ]
>>535
そりゃ
Range("C2") = x(2, 3)
だろう。
ほかのデータはどこに入れるの?規則的に並んでなければForを使うのは面倒だよ。

538 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 18:05:08 ]
別の配列に入れ替えればいいだろに

539 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 23:49:19 ]
質問なのですが、
セル範囲を一括で配列に格納した場合の添え字を
0からスタートさせることは出来ますか?

普通に格納するとx(1,1)から数値が入ってしまうところを
x(0,0)から数値が入るようにしたいのです。
今は別の配列に入れ替えてるのですが、ちょっと不便で・・・

よろしくお願いします。



540 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 23:59:25 ]
Excel2007

テキストボックスのScroolBarsプロパティをfmScrollBarBothに設定しているんですけど、
ホイールマウスの真ん中のホイール部分を回転させても有効になりません。

有効にする方法ってありますか?





541 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 02:26:41 ]
>>539
無理。
VBAでは、0オリジンに拘るよりも、1オリジンを素直に受け入れた方が何かと楽だよ。

542 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 04:03:16 ]
まだ勉強しだして一週間なんですが教えてください

AとBにそれぞれ1〜50の数字を代入し
AとBを掛け合わせた数を縦方向にペペペと貼り付けを繰り返したいんですが
1×2と2×1は答え同じなんで重複を無くすために
代入する数値を【A>B】と定義するのってどうしたらいいんですか
↓こんな感じでやってます
Dim A
Dim B
for A 1 to 50
for B 1 to 50
(右クリックコピーでペペペと貼り付けるマクロ省略)
Next B
Nezt A


543 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 04:56:01 ]
やりたいこと(出来上がりイメージ)がよくわからん上に
大事なとこが省略されてる気がする

とりあえずA>Bのときだけなんかの処理をしたいのなら

Dim A
Dim B
for A=1 to 50
for B=1 to 50
If A>B Then
(右クリックコピーでペペペと貼り付けるマクロ省略)
End If
Next B
Next A

こんな回答しかできません
出来上がりのイメージとかあればもうちょいマシな回答できるかも

544 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 05:03:23 ]
>>542
とりあえず質問そのままの解答だと
If A > B Then ぺぺぺ
だけど、条件がA>Bだけだと6*1と3*2が同じ答えで重複するし
50*50は1回しか出てこないのに条件から外れちゃうよ?

いちいち調べなくても必ずA>Bになってるプログラム
For B = 1 To 49
For A = B + 1 To 50
ぺぺぺ
Next A
Next B

それから右クリックコピーってなんだ?
セルに数値を入れるだけなら右クリックも貼り付けも必要ないんだが。

545 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 09:39:29 ]
Dim A&, B&, rowCnt&, colCnt&
rowCnt = WorksheetFunction.Max(A,B)
colCnt = WorksheetFunction.Min(A,B)

もしくは
If A < B Then
 Dim swap&
 swap = A
 A = B
 B = A
End If

ってやりたいだけか?

546 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:12:47 ]
Sub Hoge(inRange as Range, outRange as Range)
上記のようなインターフェースのサブルーチンがあるとします
inRangeのデータに何らかの演算をしてoutRangeにコピーします
このサブルーチンをワークシートの上のほうにある関数入力部分に
=Hoge(A1:B2, C1:D2)
のように入力したのですがうまく動いてくれません
引数付きのサブルーチンをワークシート上で手動呼び出しするにはどうすればいいんでしょうか?

547 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:02:14 ]
インターフェースのサブルーチン だぜ

548 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 18:59:39 ]
シート1からシート7までのb242:u242のセルをコピーして
シート11のb2からb8まで順番に貼り付けるにはどうすればよろしいのでしょうか?

549 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 19:00:27 ]
シート上に CommandButton を 2 つ配置し、
それぞれ CommandButton1, CommandButton2 とします。

CommandButton1 をダブルクリックして、次のコードを書きました。

 Private Sub CommandButton1_Click()

  CommandButton1.Enabled = False
  CommandButton2.Enabled = False

  MsgBox "now processing..."

  CommandButton1.Enabled = True
  CommandButton2.Enabled = True
 
 End Sub

ここで CommandButton1 をクリックしてダイアログボックスが出ているとき、
CommandButton2 の文字が黒のままで False になっていないように見える
のは、なぜですか?

MsgBox の行にブレークポイントを仕掛けて CommandButton1 をクリック
したときは、きちんと CommandButton2 の文字も灰色になります。

(WinXPSP3/Excel 2003)

550 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:25:57 ]
>>546
SubをPublic Functionにしろ。
あとワークシートにVBA記述すんな。モジュールに書け。
関数の入力のダイアログでユーザ定義関数の一覧部分に
自分の定義したFunctionが出てるか確認しろ。

以上。



551 名前:デフォルトの名無しさん [2010/06/10(木) 07:04:06 ]
RS485を入出力したいのですが、RS232Cとかでよく使われるMScommを利用しようと思っています。
ところが、「ActiveXはオブジェクトを作成できません。」とエラーが出てしまいます。
RS232Cの入出力でも同様に出てしまいました。
VB6.0ランタイムはインストール済です。参照設定もしています。

どうしてでしょうか?解決策は?

552 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 07:26:00 ]
>>551
oshiete.goo.ne.jp/qa/5065179.html

553 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:36:54 ]
ワークブックXには、2つのワークシート(以下WS)があります。
・ワークシートA(以下WSA)は日次報告の原紙が作成済み
・ワークシートB(以下WSB)の列Cには日次報告の対象となる日付(MMDD形式)が入力済み

上記の2つのシートを使い、
1.「WSA」を「WSB:C列に入っている日付の個数分作成」し、
2.1.で作成されたWSのシート名を「WSBの日次報告の対象となる日付」に変更
するというマクロはどのように組めばよいのでしょうか?

554 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:14:06 ]
>>553
実際に操作してマクロの記録しろよ

555 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:21:40 ]
>>553
    Dim r
    r = 1
    Do Until Sheets(2).Cells(r, 3) = ""
        Sheets(1).Copy After:=Sheets(2)
        Sheets(3).Name = Sheets(2).Cells(r, 3).Text
        r = r + 1
    Loop

シートの1枚目が原紙、2枚目が日付の入ったシートって前提な

556 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 20:11:03 ]
C++とかでDLLを作ってそのDLLの関数からRangeを操作したりって出来ますか?

557 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 20:54:18 ]
IDispatch::Invokeとか直接呼ぶ羽目になりそうな気もするけど、
一応可能じゃないかと。

558 名前:553 mailto:sage [2010/06/10(木) 23:26:31 ]
>>552
すみません…
駆け出しなもので、余計なコードが入ってしまうと理解に時間がかかるため
エディターで編集しています



>>555
ありがとうございます!
少し参照するシートや列を変更してみたら、自分の環境でも動くようになりました
ちなみに、こんな感じです↓

Sub ワークシートコピー()
Dim r
r = 1
Do Until Worksheets("日付データ").Cells(r, 9) = ""
Worksheets("原紙").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Worksheets("日付データ").Cells(r, 9).Text
r = r + 1
Loop
Application.DisplayAlerts = False
Worksheets("原紙").Delete
Dim p As String
p = Worksheets("日付データ").Range("A6").Text
Dim n As String
n = Worksheets("日付データ").Range("A7").Text
ActiveWorkbook.SaveAs Filename:=p & "\" & n & ".xls"
Application.Quit
End Sub

559 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:40:47 ]
>>542
書いてみた

Sub main()

Dim C As Range
Dim strC(2500, 0) As String

For Each C In Range("A1:AX50")
strC(C.Row * C.Column, 0) = C.Row * C.Column
Next C

With Range("A1:A2501")
.Value = strC
.RemoveDuplicates Columns:=1
End With

Rows(1).Delete

End Sub


560 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 07:44:47 ]
書き直した

Sub main()
Dim C As Range
For Each C In Range("A1:AX50")
Cells(C.Row * C.Column, 1) = C.Row * C.Column
Next C
Range("A1:A2500").RemoveDuplicates Columns:=1
End Sub




561 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 07:57:31 ]
バグがあった・・・Orz

Sub main()
Dim C As Range
For Each C In Range("A1:AX50")
Cells(C.Row * C.Column, 1) = C.Row * C.Column
Next C
Range("A1:A2500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub


562 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:57:55 ]
Excelで勤怠表を作成する時、必ず問題になるのが、
深夜割増、早朝割増、深夜休憩、早朝休憩の計算方法だと思うんだけど、
これってVBA使わずに完全に解決してる例がみつからない。

ここまできっちりやるならVBAもしくはシステム化が普通なのかな?

タイムカードは基本的には休憩時間を考慮しないし、そのへんなかなか難しいね。

563 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:31:45 ]
>VBA使わずに完全に解決してる例がみつからない。

君の能力の問題じゃね?

564 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:14:02 ]
> 君の能力の問題じゃね?

俺のググる能力が足りなかったのか!!

565 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 13:07:52 ]
>>562
そういうの作った人が、やめちゃってわかんないから、バグとってくれって頼まれたことがある
まあ、ものすごく長い式が詰め込まれとったわ
VBA使わずにできなくは無いのは確かだけど
VBA使えるならそのほうが圧倒的に楽


566 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 13:25:52 ]
>>565
読む方からしても、関数よりVBAの方がわかりやすいってことあるよね。
うちにもExcel2003の列数の制限いっぱいまで式が詰め込んであるワークシートが
複数枚、さらに記録機能で作っただけのマクロも大量の悲惨なやつがあるんだが、
とてもじゃないが解析する気にならない。当然作った人は辞めてる。
しかも経理用のだからよくわからん。

ただ、VBAとかマクロを使わずにワークシート関数のみを駆使したシートを
作ると自己満足度が高いので、気持ち的にはわかることはわかる。

567 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 15:24:34 ]
どんな就業規則なのかしらんけど、区切り時間とか計算式が変わる境界値を設定して、
一列に一個**時間を計算して、そのsum()なんかを設定値と比較して条件式なんかを
設定した方が、VBAでごちゃごちゃやるよりシンプルだと思うのは俺だけか。

568 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 15:29:44 ]
おまえだけ(´ω`)

569 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 15:55:02 ]
>>567
まあ、そう思うなら

区切り時間15分、夜間割り増し、深夜割り増し、早朝割り増し、休日割り増し、休憩(外出)時間分減算


こんくらいでいいから、どんだけすっきり書けるか、挑戦してみw
(余力があるなら、さらに休日の夜間深夜早朝とかも入れてね)

入力はタイムカードの時間記録4個ね(出社、退社、時間内出、入)



570 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:15:40 ]
>>567
平日の深夜早朝の手当は就業規則関係ないだろ。

>>569
休日の深夜早朝は法律には無いと思うので、
そういう就業規則があるところは羨ましいな。

やってみるとめんどくさいのがまともな勤怠表。



571 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 17:40:30 ]
Excelの自動計算機能を使ってもめんどくさいのに、VBAだと簡単にできると主張する不思議

572 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 17:43:26 ]
「完全に解決してる例」が見つからないのは、その手の奴は会社ごとに異なるから
汎用性のあるものを作るのはむずかしいし、自分の会社用の奴をごりごり作ったとしても
公開しないからじゃないの?

573 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 17:47:52 ]
>>562
逆にVBAじゃないと完全に解決できないと思う理由は何なの?

574 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 18:29:45 ]
そりゃVBAはなくてもできるだろうけど使った方がずっと簡単
俺なら迷わずVBAを使う

575 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 19:56:22 ]
>>571

エクセルの式は基本的に1行にまとめないといけないから複雑なことをするには向いてない
無理にやろうとすると大変な思いをする
大量の計算を1行に詰め込むのはプログラミング的にはクソの代表だしさw


VBAならそんな制約は無いし元々そういうややこしいことをするための物だから楽にできる
使える人にとってはね


使えない人がこれから覚えてでも楽かと問われれば微妙w
使えるようになるまでが大変だから(その人のセンスしだいってとこもあるけど)



576 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:31:13 ]
ワークシート関数では手間のかかることってのが

計算の途中経過を保存したり再利用すること
場合分けすること

だから、これらの処理が必要ならVBAを使った方がいい
計算式が独立してて一つ結果が出たらそれで終わりって場合はワークシート関数でやる

577 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:32:34 ]
ワークシート関数を激しく多重ネストして可読性を下げるくらいなら、
ユーザー定義関数をワークシートに張った方がずっと良いと思う。

マクロ有効にしたくない?知らんがな。

578 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 01:40:11 ]
>>573
それを俺に聞かれても困るがな。


579 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 01:44:46 ]
俺は勤務表のカレンダーをExcel関数で作ってきたけど、カレンダー作成マクロでも組んだ方が楽だよな。
Excel関数だと無駄な同じ式を30日分入れとかにゃならんし、休日判定なんかもめんどくさい。

580 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 02:49:29 ]
VBAでカレンダーを作る一番簡単な方法
ネットにアクセスしてYahooカレンダーからデータを抜き出す
祝日法が改正されてもYahooが潰れない限り全自動で対応できる



581 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 03:14:36 ]
休日は算出できんものな。
法律が出来ても変わるし、天ちゃんが死んでも変わる。

582 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 03:51:21 ]
VBAってなんて文書性の高い言語なんだといまさらながら感動
ワークシートコピー() とは
rは変数だよん
r に1を設定
ワークシート("日付データ")のセル(r,9)が""でない限り
ワークシート("原資")をワークシートコレクションの現在の個数番目の
ワークシートの後に複写,
現在のシートの名前をワークシート("日付データ")のセル(r,9)に書かれている
文字列に設定,
rにr+1を設定
以上繰り返し

エクセルの警告表示をオフに
ワークシート("原紙")を削除
pは文字列変数だよん
pにワークシート("日付データ")の範囲("A6:A6")の文字列を設定
nは文字列変数だよん
nにワークシート("日付データ")の範囲("A7:A7")の文字列を設定
現在のブックをp&"¥"&n&".xls"という名前で保存
エクセルを終了
わかった?

583 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 06:20:35 ]
エスパーに質問。
ほとんどのPCで1分程度で終わるマクロが、あるPCだけエラーは吐かないものの数時間待ってても返ってきません。
デバッグモードに入りどこで止まっているかを見ても無限ループに入っているわけではなさそうです。
PCのスペックは同等、エクセルとVBのバージョンも一緒です。
考えられる原因はなんでしょうか?



584 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 08:14:52 ]
>>580
WebAPIは基本ですよね。

585 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 08:19:08 ]
>>583
on error resume next でエラーループさせてるとか。
レジストリ書き換えが上手く行って無いとか。
iniの読み込みがいつまでもtrueにならないとか。

エラー吐かない、と書いてるならば on error resume next は入れて無いよね?
デバッグで止まっているなら、そこが問題なんじゃないか?
do loop 使ってる?

いかんせん情報が少なすぎる。

586 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 09:15:00 ]
Debug.Printまみれにしてやれ。

587 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 09:51:46 ]
当然ウイルス対策ソフト切って試してるんだろうな

588 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:09:55 ]
yahooのカレンダー取得せんでもアクセスカレンダーって使えなかったっけ
あれは祝日がないのか?

589 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:40:59 ]
>>584
Windowsのバージョンが変わった場合とか、そもそもMacが共通だとか、
環境によってはライブラリが無いとか、そういう制限て無いの?

590 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:42:58 ]
>>588
もう祝日は数年分の祝日リストをワークシートに書いといてそれを見るようにすればいいんじゃね?
配布が簡単なところがExcel開発の良いところだし。



591 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:39:04 ]
>>585
もうすこし詳細調べてみます
>>586
おk

592 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:32:51 ]
祝日法はアルゴリズムそのものだからなあ
多分フリーで最新の祝日反映されたカレンダー一覧がごろごろ堕ちてるだろ

593 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:17:50 ]
>>589
ほとんどがXML(or SGML)ファイルなので大丈夫と思うよ。
欠点はスキーマが統一化されてない事かな。

594 名前:デフォルトの名無しさん [2010/06/13(日) 11:10:35 ]
事務職レベルなのですごく初歩的な質問します。

EXCELでもACCESSでもいいんですがVBAを書くとき、
ネットとか既存のシステム?からVBAを借用してきて、自分用に編集することってあります?
それとも、全部一から書きますか?

595 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 11:59:23 ]
>>594
ネットにあるサンプルを利用するのは凄く勉強になるけど、
必ず自分で手打ちする事が大切かな。

面倒かもしれないけど、コードを印刷して自分で手打ちするのと、
ただコピペして終わりにするのでは、大きな差があると思う。

自分の物にしたいなら、コード手打ちが良いよ。
もちろん1から組めるに越した事はないけどね。


596 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:02:29 ]
ライブラリならともかくコピーして編集って怖くね?
なんかものすごいバグが紛れ込みそうで不安

597 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:06:22 ]
>>596
VBAのライブラリ結局生ソースだろw


598 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:09:38 ]
メソッドの用法を調べて、後は自分で組めるレベルまで頑張るしかない。


599 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:11:40 ]
>>597
ライブラリとしてまとまってるクラスや関数を使うのと
実装をいじるのでは全然違うでしょ

600 名前:デフォルトの名無しさん [2010/06/13(日) 12:20:17 ]
自分で作ったものだったら何をやってるか判ってるからそのまま流用っつーのはよくある。

ネットで拾った物は自分で、その部分のみをテストして納得したら
編集し直して使うのはある。
(変数名を自分がわかり易い名前にするとか




601 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:24:10 ]
プログラム書く癖ってあるじゃん。
定数化のルールとか、インデントの入れ方とか。
range("A1") で書く人もいれば、cells(1,1) で書く人もいる訳で。

そう考えると、やっぱり自分で書きなおした方が良いな。

602 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:37:19 ]
>>599
たいしてかわらん
そのまま使えるものをコピペしてくるなら
ライブラリだろうが、実装だろうが変わりないじゃん

アレンジがひつようなら、やっぱりかわらんじゃん

603 名前:デフォルトの名無しさん [2010/06/13(日) 12:41:12 ]
レスありがとうございます。
今まで、会社で既存のものを流用したり、ネットから一部コピーや
本に書いてるのを打ち込んだりしてました。
知識不足のため、全部自分で考えてやると時間がかかり過ぎて・・・

でも、ちゃんと覚えていくしかないですね。

604 名前:デフォルトの名無しさん [2010/06/13(日) 12:42:46 ]
あ、
>>603は594です。

605 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:45:25 ]
>>602
そのまま使えて、副作用もないコードならコピペでもいいかもね
でもまずは副作用がないことを確認して、アレンジするなら新しい副作用が出ないように書かないといけない
規模が小さければどうって事ないが、普通これは結構な手間になり、見逃せばバグにもなる
ライブラリはそういうことも実装する側が考えている(というか考えるべき)からその手間もリスクも少ない

606 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 21:43:36 ]
特殊なアドインを自動操作する方法を検討してます。
手動でやるときは、メニューバーから選択して、一連のキー入力をするだけなんですが、
vbaでこのような処理を自動化するにはどうすればよいでしょうか?

もちろん、本来はアドインのインタフェースを調べてそれを呼ぶべきなんでしょうが、
仕様がまったく不明なので、手動処理をなぞれないかと思っています。

607 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 22:10:43 ]
addinで定義されてるルーチンなり関数なりを呼び出せば良いだけでは?

608 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 13:35:56 ]
>>606
VBAじゃなくて、なんかの自動化ソフトを使ったら?

609 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 14:31:38 ]
なんで「調べてます」って書かないで「検討してます」とか書くんだろう

610 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 14:47:14 ]
>>606
決まった順番でキーを押すだけならSendKeysという命令があるけど
副作用も多いので使えるかどうかはよく検討する必要がある。



611 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:20:40 ]
アドイン自体を操作するのに使える?

612 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:46:00 ]
参照はAddFromFile
アドインもなんかなかったっけ

613 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:53:05 ]
あ、いやそういう意味じゃなくって、メニュー操作してアドインに制御がわたった後でも、
そのアドイン自体の操作をSendKeysでできるのかなってこと

614 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 17:03:08 ]
そのアドインが階層メニュー使ったり、ダイアログ表示したりする奴だったら、多分SnedKeysじゃ信頼性なくて
駄目だと思う。

615 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 18:09:29 ]
今このVBAをそのまま流用して改造してるんですが、
www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html

選んだ階層以下すべてのファイルを、特定のURLを先頭につけて抽出したいのですが、うまくいきません。

いじったのは以下のところだけですが、ファイルがある場所のみしか抽出されないのと、フルパスをうまく吐いてくれません。
(ファイルのあったディレクトリィだけ出る)

どこがまずいでしょうか。

' 現在フォルダをシート上に表示
g_cntPATH = g_cntPATH + 1 ' 参照フォルダ数を加算

FilePaths = "wwww.test.com" & FilePaths & "/" & objPATH.Name & "/"
' ■先ずサブフォルダを探索するループ処理
For Each objPATH2 In objPATH.SubFolders
' フォルダ単位のサブ処理(再帰呼び出し)
Call SEARCH_SUB_FOLDER(objPATH2, GYO, COL)
Next objPATH2
' ■本フォルダの各ファイルをシート上に表示するループ処理
COL = COL + 1 ' カラムを加算
For Each objFILE In objPATH.Files
g_cntFILE = g_cntFILE + 1 ' 参照ファイル数
GYO = GYO + 1 ' 行を加算
With objFILE
' ファイル名+(最終更新日時+ファイルサイズ)
Cells(GYO, COL).Font.ColorIndex = 1
Cells(GYO, COL).Value = FilePaths & .Name
If 25000 <= .Size Then
Cells(GYO, COL).Font.ColorIndex = 3
End If

616 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:05:49 ]
壊滅的に説明が下手なので、コード読む気にすらならない

617 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 11:18:58 ]
説明は普通に読めるぞ
ほるだのなかに
インデックス.html
ページ1.HTML
とかを見つけたら、
www.ほにゃらら/インデックス.HTML
って合成したいんだろう

コードは見てない

618 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:22:10 ]
>>615
本当にそこしかいじってないんなら、変数FilePathsが宣言も初期化もされていないから
フルパスが出るわけない

619 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:50:43 ]
> 選んだ階層以下すべてのファイルを、特定のURLを先頭につけて抽出したい
「抽出」の意味が不明。(コード見ればわかるかもしれんが)

> ファイルがある場所のみしか抽出されない
「ファイルがある場所」以外は、一体どこの何を抽出したいのか?
「選んだ階層以下すべてのファイル」が対象ではないのか。

620 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:57:39 ]
>>618
宣言はしてあります。
ただ、全部コピペすると書き込めなかったので・・・。

>>619
そうです。その通りです。
選んだフォルダの階層以下すべてのファイルのフルパスを、
エクセル上に書き出したいんです。
今のままだと、ファイルのあるフォルダしか書き出されない上に、
そのファイルのあるフォルダよりもっと上の階層がなぜか消えてしまってるんです。



621 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 16:04:38 ]
>>620
byval と byref を間違えてるに一票


622 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 16:06:27 ]
>>615
リンク踏んだけど、そもそもそのページが読む気失せる作りだわ

623 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:23:07 ]
>>615
暇だったのでやてみた

FilePaths をグローバルに宣言して

全体処理のほうにこれを書いて
FilePaths = "wwww.test.com/"

再帰のほうのこれを修正
FilePaths = "wwww.test.com" & FilePaths & "/" & objPATH.Name & "/"

FilePaths = FilePaths & objPATH.Name & "/"

で、カラム位置は別として、希望の文字列が得られてると思うが?
だめなら、元のソースが壊れてると思われ、コピペからヤリナオスベシ

624 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:26:37 ]
>>622
ページの作りはどうでも、書いてるコードの内容が全体的にヘタクソ杉。
よくあんなの公開できるもんだと感心する。

625 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:29:22 ]
参照を受け取るときにC++でいうconstみたいな指定子ってある?

626 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:35:14 ]
>>623
>>623
おっと、バグッテた

再帰のプロシージャの中で
dim tmp しといて

FilePaths = FilePaths & objPATH.Name & "/"
 ↓
tmp = FilePaths
FilePaths = FilePaths & objPATH.Name & "/"

出口で
FilePaths=tmp

これでいけるわ

627 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:36:08 ]
>>624
悪口しかいえないやつより100万倍まし

628 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:45:15 ]
>>625
c++を知らないvb使いとしては、参照を受け取るときのconstの意味がわからん
どういう動作なのか説明してくれたら、VBではこうだと言えるカモ


629 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:53:47 ]
>>628
例えば配列やクラスをディープコピーして渡すのはコストがかかるので参照で渡す
けど参照で渡したときに間違って書き込みをしたくない場合につけるセーフティみたいなもんです
ようするに読み取りだけできて書き込みはできない引数のことです

630 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:58:39 ]
>>626
あ〜そだ、グローバルで宣言したFailePathsを引きずり回してダサダサなので
ソースをかっこよくしたいなら、引数のほうに入れたほうがいいね
自分でやってね





631 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:59:00 ]
>>629
VBAにはそういう機能はない

632 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 18:02:08 ]
>>631
しょぼん・・・どうもでした

633 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 15:48:05 ]
>>626
ありがとうございました!
グローバル変数の存在を思いっきり忘れてました・・・。

634 名前:デフォルトの名無しさん [2010/06/18(金) 00:58:58 ]
初心者で申し訳ありません

今A1からD10まで数字が埋まった表があります
このうちB1〜B10を選択し、コピー、F1〜F10に貼り付けするとします
このB1〜B10を選択するときに、直接"B1:B10""指定でなく、「表上の左から2列目、一番上から一番下までの範囲を選択」、
としたいのですが、どのように書けばよろしいのでしょうか?
表はいくつかあり、それぞれ縦のデータ数が10だったり15だったりまちまちなため、セル指定だと対応できないので困っています・・・


635 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:31:16 ]
>>634
「表上の左から2列目、一番上から一番下までの範囲を選択」
だと

途中に空白セルがないなら
Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Select
とかする

個人的には好きではないけど
途中に空白セルがあった場合なんかは
Range(Cells(1, 2), Cells(65536, 2).End(xlUp)).Select
の方がいいかも

636 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:45:50 ]
>>634
B1からデータの入っているセル範囲を自動的に求めてコピー
Intersect(Range("B1").CurrentRegion, Range("B:B")).Copy

637 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 02:55:16 ]
もっと単純に、
Columns("B:B").Select とか
Columns(2).Select とかで良いんじゃ?

んで
Selection.Copy でコピーして
Columns("F:F").Select でF列選択
ActiveSheet.Paste ではりつけ

つかまずはマクロの記録

638 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 15:23:29 ]
>>636
こんなやり方初めて知った。
でも、空白セルがあるとそこで途切れてしまうから、結局>>635のほうがいいのかな。
65536って入力するより、rows.countのほうがいいだろうけど。


639 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 16:22:57 ]
B列全体をコピーしてもいいのかどうか。空白セルをコピーすると何かまずいことがあるのか。
途中に空白が入ってデータが飛び飛びになることはあるのか。

このあたりが条件として欲しいところだな。
それによって手間や方法が変わってくる。

640 名前:634 [2010/06/18(金) 20:50:20 ]
みなさんさまざまなアイディア、ありがとうございました

以下のように組むことで、一応目的達成することができました
ActiveCell.CurrentRegion.Select
Selection.Offset(0, 0).Columns(2).Copy
ActiveCell.Offset(0, 5).Select
ActiveSheet.Paste



641 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:11:18 ]
>>640
それでいいんなら1行にまとまるよ

ActiveCell.CurrentRegion.Columns(2).Copy Destination:=ActiveCell.Offset(0, 5)

642 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:12:41 ]
>>634
セレクトしてる意味がない

これで充分
Columns(2).Copy
Columns(2).Offset(0, 5).PasteSpecial


643 名前:デフォルトの名無しさん mailto:sage [2010/06/19(土) 23:28:29 ]
zip 内のファイル一覧を取得したいのですが、
サンプルが見つからなくて何とか以下のようなものはできました。
どこか問題はないでしょうか?とくに item.GetFolder が正規のメソッドとして
存在するのかが気になっています。
また、Folder3、FolderItem2のリファレンスはありますでしょうか?

Option Explicit
Dim m_fso
Dim m_shell
Sub main()
  Set m_fso = CreateObject("Scripting.FileSystemObject")
  Set m_shell = CreateObject("Shell.Application")
  ZipList "c:\test.zip"
End Sub
Function ZipList(FileName As String)
  Dim folder
  Set folder = m_shell.Namespace("c:\test.zip")
  ZipListSub folder
End Function
Function ZipListSub(folder As Variant, Optional path As String = "")
  Dim item
  For Each item In folder.Items
    If item.IsFolder Then
      ZipListSub item.GetFolder, item.path & "/"
    Else
      Debug.Print path & item
    End If
  Next
End Function


644 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 00:37:34 ]
>>643
とりあえず、Shell.Application絡みのドキュメントはここ。
msdn.microsoft.com/en-us/library/bb773938(v=VS.85).aspx
FolderItem2はShellFolderItemとしてエイリアスされている。
Folder3のヘルプは見つからないな。
更に詳細が知りたければ、参照設定で「Microsoft Shell Controls And Automation」を足すと、
大本のタイプライブラリの内容が確認できる。Folder3は一応ここに出てくる。
WindowsSDK等に付属している「OLE/COM Object Viewer」で
「Type Libraries」-「Microsoft Shell Controls And Automation (Ver 1.0)」を表示させれば、
FolderItem2のエイリアスとかまで確認できるな。

645 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 13:06:43 ]
>>643
それ以前に.ZIPがShellで処理される保障はないと思うがそれはいいのか?

つかエクセル関係ないからスレ違い
テンプレなくなってるんだな

646 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 16:48:15 ]
zipがshellで処理されないOSって何?

647 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 16:57:59 ]
2000とか98,98SEとか

648 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 18:29:27 ]
>> 647
Windows 3.1+Excel 5.0の考慮も必要だね!

649 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 20:57:02 ]
Windows8とか

650 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 21:38:02 ]
>>643
× Set folder = m_shell.Namespace("c:\test.zip")
○ Set folder = m_shell.Namespace(FileName)



651 名前:643 mailto:sage [2010/06/21(月) 23:37:34 ]
>644

ありがとうございます。
残念ながら英語版しかないようですね。

>645
zipfldr.dllが解除されている場合とかでしょうか?

>650
テストしたのをそのままあげてしまいました。
そこですが、fso.GetAbsolutePathName で取得したものを
渡さないと時々取得できないことがあるようです。
原因はさっぱりわかりません。



652 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 14:36:04 ]
>そこですが、fso.GetAbsolutePathName で取得したものを
>渡さないと時々取得できないことがあるようです。
>原因はさっぱりわかりません。
なぜだろうね

653 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 14:46:04 ]
AbsolutePathNameじゃないからだろ

654 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 17:02:02 ]
>>652
どっかいけ、アホ

655 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 22:46:43 ]
Stringで渡すとだめで、VariantならOKのようです。


656 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 23:17:45 ]
Set folder = m_shell.Namespace((FileName))

657 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 23:35:53 ]
それは意味ない

658 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 19:22:11 ]
意味あったけど

659 名前:デフォルトの名無しさん [2010/06/24(木) 19:49:57 ]
初心者なんですが、皆さんの力を貸してください。
下記で困ってます。orz

【実現したいこと】
ワークシートにグラフを追加し
グラフのX軸の目盛位置(wkChart.Axes(xlCategory).Left)ピッタリに四角シェイプを配置したい。
配置先は、グラフ内ではなくワークシート上。

【多分必要だと思うこと】
グラフ内の座標から、ワークシートの座標に変換する必要がある?

【試したこと】
グラフ内の座標==ワークシート上の座標でシェイプを追加したにもかかわらず
見た目上ズレている。

【コード】
'チャート内に四角シェイプを追加して選択
wkChart.Shapes.AddShape(msoShapeRectangle, 30, 100, 20, 30).Select

'ワークシート上に四角シェイプを追加して選択
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 30, 100, 20, 30).Select

660 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 18:42:58 ]
APIで座標を調べるのがあったな。



661 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 22:56:29 ]
>>659
グラフ内の座標ってChart自体の (0, 0) から始まるわけじゃなかったような気がするけど、ひょっとしてそのこと?

wkChart.Shapes.AddShape(msoShapeRectangle, 30-wkChart.ChartArea.Left, 100-wkChart.ChartAreaTop, 20, 30).Select
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 30, 100, 20, 30).Select

662 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 23:30:08 ]
>>659
A1セルの大きさが基準になる。手順は以下。これで、(10,10)セルにグラフを移動とか出来る。
但し、全セルが同じ大きさであることが重要。
詳細は忘れたから調べてwww

@A1セルの大きさを変更 or 全セルの大きさを整える
AA1セルの縦横サイズを取得
B座標位置(左上位置になる)を指定する

663 名前:662 mailto:sage [2010/06/26(土) 23:33:24 ]
すまん。グラフの位置決めのことで、チャート内ではない。
まじすまそ

664 名前:デフォルトの名無しさん [2010/06/27(日) 01:30:22 ]
正規表現で置換するだけの処理なんですが上手くいきません
ご教授願います

Sub sample01()
Dim re As Object, n As Object
Dim Match As Object, Matches As Object

Dim Val As Variant '配列
Dim i As Integer 'カウンタ

Val = Worksheets("Sheet1").Range("A1:A5").Value

Set re = CreateObject("VBScript.RegExp")

For i = 1 To 5 Step 1
MsgBox "対象セルの文字列は" & "【" & Val(i, 1) & "】"

re.Pattern = "\d{1}" '検索する正規表現パターン
re.Global = True '検索範囲はグローバル
re.IgnoreCase = True '大文字・小文字を区別する
Set Matches = re.Execute(Val(i, 1))

'■HITしたらああああに置換↓ここが上手く動いてくれない■
Val(i, 1) = re.Replace(Val(i, 1), "ああああ" & i)

'Set re = Nothing
Next i

MsgBox i - 1 & "件マッチ!"
End Sub

665 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 02:03:45 ]
>>664
動いてますよ?

もしかして、ワークシートに書き込みたいのなら
Range("A1:A5") = Val
を最後に足しとけばOKかと

666 名前:664 [2010/06/27(日) 02:07:06 ]
>>664だけでは説明不足だったので付け加えます
ソースの置換処理内容だけ見るとわざわざVBAでやる必要ない感じですが
実際は複雑な正規表現処理を入れる予定です

上記ソースよりも簡単に指定したセルを正規表現で置換できる処理がありましたら、
合わせてご教授頂ければと思います

667 名前:デフォルトの名無しさん [2010/06/27(日) 02:24:08 ]
>>665
おっしゃる通りでした
Range("A1:A5").Value = Val
でワークシートに置換した値が入りました

ありがとうございました!

668 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:36:01 ]
所で、forのループ外で宣言している re をループ内で開放しちゃってるけど大丈夫?

669 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 10:12:08 ]
あ、コメントアウトされてたのね。

老婆心ながら、setしたobject型変数は最後に開放しておいた方がいいよ。
end subのすぐ前でOK。

670 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 14:23:54 ]
>>老婆心ながら、setしたobject型変数は最後に開放しておいた方がいいよ。
なんで? 不要だろ



671 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 14:25:52 ]
ここから先しばらく不毛な論争が続きますので質問者の方は無視してくださいな



672 名前:664 [2010/06/27(日) 15:51:40 ]
Set re = Nothingを入れる事でメモリ解放するって事ですかね?

個人的にはそんな事より"A1:A5"の範囲ならまだしも
セル範囲が増えた場合オーバーフローしないか心配です
何か良い方法ないですかねぇ
配列を使わずにセル範囲を一つ一つループで置換orスルーできるような処理があれば1番なんですが

673 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 15:55:12 ]
>>669
完全に不要。
あと、解放、な。

674 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 15:56:56 ]
>>672
何がどうオーバーフローするんだ?

675 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:06:12 ]
Nothing入れないと自動変数の領域がキャッシュされてるため
いつまでもオブジェクトが削除されないとかVB.netで聞いた事ある

676 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:12:26 ]
.NETからExcelを操作した時のアウトプロセス解放関連の話と
勘違いしている予感。

677 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:23:59 ]
COMのGCって参照カウンタでしょ。
それに反しなければわざわざリリースなんて要らん。

678 名前:672 [2010/06/27(日) 16:26:01 ]
>>674
ちょっとまだ試行中なのですが、例えば配列数を膨大な数にした場合や
各配列内のデータ(取得したセルの値)、文字数が多い場合等です

Variant型を超える事はないと思ってはいますが、
少し今のやり方だと心配なんですよね

679 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:41:37 ]
>>675
キャッシュ(笑)
VB.net(笑)
適当なこと言ってんなハゲ

680 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 17:51:36 ]
「行儀が悪い」

これならどうだ



681 名前:デフォルトの名無しさん [2010/06/27(日) 18:46:33 ]
煽りとかでは無くて純粋に教えてほしいんだけど、
setした物はnothingにして終わらせる、って教わったんだ。

当時聞いた話では、メモリを占有し続けるからって感じで納得してたんだけど、
これは嘘なのかな?

マナーとしてnothingを代入してやるのか、それとも技術的な理由があるのか、それが知りたい。
nothing入れてやる必要が無いなら、余計なコード書きたくないし、教えてください。

682 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:41:25 ]
>メモリを占有し続けるから

これは嘘ではない

683 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:49:31 ]
nothingを代入しなくて、その変数が生きていれば、メモリが開放されることはない
nothingを代入しても、そのメモリがいつ開放されるかは定かではない
nothingを代入しなくても、その変数が無効になれば、その領域は自動的に開放される

原則はこういうこと
昔は使い終わったらすぐにnothing代入して、開放可能にしましょうってのが主流だった
今は特殊なオブジェクトでもない限り、あんまり気にしなくていいと思うぞ

684 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:57:09 ]
テンプレに書いてくれ
無駄なもの
最後にnothing
最後にerase
とか
他にもあるんだろうけど


685 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:09:26 ]
>>682-683
ありがとう。
俺、後輩にいつもnothingで終わらせろって言ってた・・・。
先輩の指導を鵜呑みにして、自分で調べなかったのが凄く恥ずかしい。
nothing忘れると、先輩が口を酸っぱくして指摘してたんで、そうと信じてた。

>nothingを代入しなくても、その変数が無効になれば、その領域は自動的に開放される
VBAの場合はend subを通った時点でdimが無効になるから、基本的にはset nothingいらないのかぁ・・・。

本当にありがとう。


686 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:53:29 ]
SQLServerのJOBにActiveXスクリプト書くときは
Nothingしないと警告でるよ

687 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:21:13 ]
そういや、fjのmalloc/free論争はどう決着したんだっけなあ

688 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:38:02 ]
>>685
俺は無駄なNothing代入はいらない派だが、またそうやって人の言うこと鵜呑みにするなよ?
VBAは参照カウント方式だから、参照がなくなった時点で自動的に解放されるが、
循環参照(オブジェクトAとBがお互いの参照を保持しちゃってるような場合)があるときは
明示的に解放してやらないとメモリリークする
とりあえずNothingで終わらせておけば問題は発生しないし思考停止できる、というのも一つの考え方ではある

689 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 23:43:38 ]
俺も無駄なNothing代入はいらない派だが
>>688
メモリリークといっても、エクセルの使用メモリが増えていくだけで
エクセルを終了させれば開放される

>Nothingで終わらせておけば問題は発生しないし思考停止できる
ちなみに変数をNothingにしてもメモリリークは防げないこともある

Sub test()
    Set x = CreateObject("Scripting.Dictionary")
    Set y = CreateObject("Scripting.Dictionary")
    Call x.Add("y", y)
    Call y.Add("x", x)
    Set x = Nothing
    Set y = Nothing
End Sub

このプロシジャ呼ぶとちょっとずつメモリ使用量が増加していくぞ

690 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 00:31:57 ]
だからさあ、いらないって言うやつは自分が作るときに使わなきゃいい
いるってやつは自分が作るときに使えばいい
わざわざ他人のコーディングを否定すんなよクズども
いい加減この無限ループやめろっての



ここまでテンプレ



691 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 01:10:01 ]
質問スレだから
質問されたら答えるだけ
間違いを教えていいわけない
結論はどっちでもいいと答えるのかもしれないけど

692 名前:デフォルトの名無しさん [2010/06/28(月) 09:06:38 ]
全角英数字を半角英数字にする関数ってありますか?
Case文で全文字毎に置換するしかないですかね?

693 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:34:12 ]
>>692
つ素寅昆布

694 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:34:31 ]
はいいえ

695 名前:デフォルトの名無しさん [2010/06/28(月) 11:02:28 ]
>>693
まんこの中見る器具!

696 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 11:40:42 ]
>>692
記号もカナも、半角に変換できる文字は全部変換してもいいんならStrconv
英数以外は変換したくないんなら1文字ずつやるしかない

697 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 15:54:16 ]
相互参照になった場合は?

698 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 17:29:18 ]
>>696
つ性器豹源







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

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

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