Excel VBA 質問スレ P ..
[2ch|▼Menu]
85:デフォルトの名無しさん
10/04/22 17:02:46
>>84
すみません。カートン総数も減らしたいので出来るだけ多くパッキングしたカートンを基本にしたいのです。
書いてなかったですね。申し訳ない。
奇数もありますが、ご指摘のとおり繰上げ処理でも問題ないです。

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

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

86:デフォルトの名無しさん
10/04/22 17:04:14

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

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

88:デフォルトの名無しさん
10/04/22 17:38:18
1カートン1個なら端数は出ないし1種類で済む

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

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

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

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

91:デフォルトの名無しさん
10/04/22 18:32:01
>>90
openoffice

92:デフォルトの名無しさん
10/04/22 18:32:38
>>90
URLリンク(msdn.microsoft.com)(v=VS.100).aspx

93:デフォルトの名無しさん
10/04/22 18:33:43
体験版
URLリンク(www.forest.impress.co.jp)

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

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

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

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

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

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

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

98:デフォルトの名無しさん
10/04/23 04:04:01
すべてのヘルプを読んでから質問するように

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

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

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

102:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/23 13:09:52
期待通りに動いていないんだから
どうみても勘違いです
ほんとうにありがとうございました

104:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/23 13:56:25
マクロはときどき壊れるからなぁ
最後に正常に動いていたときの
バックアップを取るのは必定


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

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


107:デフォルトの名無しさん
10/04/23 17:04:05
>>102

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

108:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/23 17:17:37
doeventはさんでみるとか?

110:デフォルトの名無しさん
10/04/23 17:31:05
ホンとだ
間に処理かますと処理後の色変更しかしやがらねー

111:デフォルトの名無しさん
10/04/23 17:51:22
みなさん、いろいろ試してくれて、ありがとうございます。

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

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


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

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

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

114:デフォルトの名無しさん
10/04/23 18:16:36
>>111

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

115:デフォルトの名無しさん
10/04/23 19:19:25
>>105
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ


116:デフォルトの名無しさん
10/04/23 20:19:54
>>103
>>104
>>105
>>112 死んでよし



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

118:デフォルトの名無しさん
10/04/23 21:15:36
>>115
あの餌で釣れるとは思わなかったんだが・・・

119:デフォルトの名無しさん
10/04/23 21:18:03
>>116
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ


120:デフォルトの名無しさん
10/04/23 22:15:47
>>117
違う
どっちも戻り値はString型

121:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/24 12:38:09
>>122
c = WorksheetFunction.Ceiling(n / 2 + 0.1)



かな?

125:デフォルトの名無しさん
10/04/24 12:54:05
>>123
×Mattew ○Matthew

みんな買おうZE☆
URLリンク(www.amazon.co.jp)

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

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

127:デフォルトの名無しさん
10/04/24 13:40:26
>>126
これでもいいんじゃね

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

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

129:デフォルトの名無しさん
10/04/25 02:38:39
教えてください。

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

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

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


130:デフォルトの名無しさん
10/04/25 02:50:13
無理

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

132:デフォルトの名無しさん
10/04/25 04:19:39
>>129
マクロはときどき壊れるからなぁ

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

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

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

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

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

135:デフォルトの名無しさん
10/04/25 11:28:11
ScriptControlで直接Excelからスクリプト呼び出しするのが普通。

136:デフォルトの名無しさん
10/04/25 19:20:36
もとからスクリプトサポートされてるんですねthxでした

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


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

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

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

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

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

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

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

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

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

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

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

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

148:デフォルトの名無しさん
10/04/26 17:18:19
それを面接で言えばよかったんじゃないの?なんで言わなかったの?

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

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

150:デフォルトの名無しさん
10/04/26 17:55:07
マ板でやれや

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

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


152:デフォルトの名無しさん
10/04/26 18:21:43
>>149
気持ちは分かる

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

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

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

154:デフォルトの名無しさん
10/04/27 12:28:48
On Error

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

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

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

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

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

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

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

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

160:デフォルトの名無しさん
10/04/28 19:08:50

実装できないwww


161:デフォルトの名無しさん
10/04/28 21:23:58
糞言語だと思うなら、使わなければいいじゃん

162:デフォルトの名無しさん
10/04/28 22:24:00

vbaは言語じゃねーよwww


163:デフォルトの名無しさん
10/04/28 22:44:06
連休らしくなってまいりました
構ってちゃんの季節ですね

164:デフォルトの名無しさん
10/04/28 22:46:53
ふぅ(´ω`)

165:デフォルトの名無しさん
10/04/28 22:47:53
>>163
URLリンク(jukai-deep-ice.com)

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

167:デフォルトの名無しさん
10/04/29 09:57:52
COM使うならExcel使う必要も無ければVBAを使う必要もない

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

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

169:デフォルトの名無しさん
10/04/29 10:47:31
え?

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

171:デフォルトの名無しさん
10/04/29 12:41:39
まあ、ここでExcelVBAを否定しても意味ないし

172:デフォルトの名無しさん
10/04/29 13:47:12
たしかにRubyは面倒だな

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

174:デフォルトの名無しさん
10/04/29 14:37:53
またもや知ったかか

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

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

177:デフォルトの名無しさん
10/04/29 14:47:28
>>175
自宅警備会社というやつですか?

178:デフォルトの名無しさん
10/04/29 15:01:55
>>177
自室です。

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

180:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/29 17:20:05
URLリンク(officetanaka.net)

182:デフォルトの名無しさん
10/04/29 18:08:21
Application.Calculation = xlCalculationManual
で、関数の計算を止めた場合、

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

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

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


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

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

185:デフォルトの名無しさん
10/04/29 21:11:20
つ Ca

186:180
10/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:デフォルトの名無しさん
10/04/30 00:43:47
>>184
その会話で気の利いたことを言った(つもり)のはどっち?

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


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

190:180
10/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:デフォルトの名無しさん
10/04/30 19:13:14
>>190
アドレスとかじゃ本末転倒か

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

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

選択 cells(1,1).select

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



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

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

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

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

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

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

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

セル選択の解除は不可能

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

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

197:デフォルトの名無しさん
10/04/30 22:05:08
何でもいいけどいい加減>>182に答えてくれよ!

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

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

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


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

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

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

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

203:デフォルトの名無しさん
10/05/01 22:41:08

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

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

205:デフォルトの名無しさん
10/05/02 06:59:03

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

206:デフォルトの名無しさん
10/05/02 12:09:35
てか教えてGooに行けばいいんだよな

207:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/02 15:58:59
> 意思決定までコンピューターが出来るようになると、
> 人間自体が必要なくなる。

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

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

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

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

209:デフォルトの名無しさん
10/05/02 17:06:47
>>208
んじゃそのプロセスをマクロで表現しなよ

210:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/02 21:54:14
あなたは知らないのですか?

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

213:デフォルトの名無しさん
10/05/04 21:21:37
エクセルのサイズが500MBに届きそうなんだがこんなもんか?

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

215:デフォルトの名無しさん
10/05/04 22:53:39
URLリンク(peiyorin.cocolog-nifty.com)

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

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

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

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

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

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

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

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

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

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

220:デフォルトの名無しさん
10/05/05 13:32:18
VBAの話をしろボケ

221:デフォルトの名無しさん
10/05/06 00:23:24
>>219
なかなか面白い話しやけど、確かにスレ違い。

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

223:デフォルトの名無しさん
10/05/08 17:47:19
いいえ

224:222
10/05/08 17:55:03
>>223
すいません

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

225:デフォルトの名無しさん
10/05/08 18:11:12
WorksheetFunction.Averageって配列を受け付けられなかったっけ?

226:デフォルトの名無しさん
10/05/08 18:49:16
配列できるね。

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

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

229:デフォルトの名無しさん
10/05/08 19:24:00
>>228
じゃあ、10〜iまで回せばいいじゃん

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

231:デフォルトの名無しさん
10/05/08 19:50:24
平均ぐらい自分で出せよカス

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

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

234:222
10/05/08 20:19:47
>>233
vbaは何分初めてなもんで
よろしくお願いいたします

235:デフォルトの名無しさん
10/05/08 20:23:10
何事もほどほどにな

236:デフォルトの名無しさん
10/05/08 20:45:32
>>227
気のせいでした

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

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

ありがとうございました

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

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

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


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

242:デフォルトの名無しさん
10/05/09 19:16:36
そのまんま、Excelを2重起動すればいい。

243:デフォルトの名無しさん
10/05/09 19:25:38
>>239
取りあえずDoEventsでも入れてみれば

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

245:デフォルトの名無しさん
10/05/09 20:11:42
自己解決

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

247:デフォルトの名無しさん
10/05/10 08:07:15
すいません。誤爆しました

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

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

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



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


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


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

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

254:デフォルトの名無しさん
10/05/12 13:04:22
条件式について質問です。

処理対象データ ↓

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

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

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

255:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/12 13:21:31
>>256
返答ありがとうございます。
高度な文面なので検索してちょっと理解深めます。
Offset〜〜に解決の糸口を見つけられそうなので
イジイジしてきます。ありがとおおおおおおおお

258:デフォルトの名無しさん
10/05/12 18:19:08
教えてください。

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

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

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

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

宜しくお願いします。


259:デフォルトの名無しさん
10/05/12 18:21:51
Application.ScreenUpdateing = Falseじゃだめなの?

260:デフォルトの名無しさん
10/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を、' にすると、正しく色が変化します。(再現性があります)
どうしてこんなことが起こるのでしょうか?

宜しくお願い致します。



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4954日前に更新/189 KB
担当:undef