Excel VBA質問スレ Pa ..
[2ch|▼Menu]
129:デフォルトの名無しさん
07/12/25 01:14:14
フォルダに0001〜9999jpg
セル2に000*と入力すると自動的にセル1に該当の000*jpg表示さすにはどうすればいいでしょうか?
よろしくお願いします

130:デフォルトの名無しさん
07/12/25 01:18:51
>>129
セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
4桁に制限したければそういうifを書けばいい。

131:デフォルトの名無しさん
07/12/26 00:02:45
>>93の人ありがとうございました。

1^2+2^2+3^2+……+20^2

1^3+2^3+3^3+・・・・+20^3

ついでにこれのFor文を使った書き方も教えていただけるとありがたいです。

132:デフォルトの名無しさん
07/12/26 00:12:39
宿題か?宿題なのか?

133:デフォルトの名無しさん
07/12/26 00:24:08
そんなことより聞いてくれよ。
というか教えてください。
マクロ流してるとリソース不足とかメモリ不足とか言い出すんだけど、何で?
やっぱりファイルが大きすぎるのか?
1ファイルで60MBとか無理なのか?
ご存知の方いたら助けてください。

134:デフォルトの名無しさん
07/12/26 00:29:42
>>133
うん、でかいw限界点とかはわからんが・・・
Win2000メモリ1Gの環境で、30MB程度のマクロ・数式・外部リンクつきのブック2個開くと危ういので・・・

135:デフォルトの名無しさん
07/12/26 00:55:12
>>132
そうなんですよ。なんとかお助け願えないでしょうか?

136:デフォルトの名無しさん
07/12/26 01:06:14
for i=1 to 100
a = i
next


137:デフォルトの名無しさん
07/12/26 01:07:09
途中送信orz動作未確認
dim a as integer
for i=1 to 100
a = a + i * 2
next

3は2を変更で

138:デフォルトの名無しさん
07/12/26 01:21:16
>>131

ちょっとまて
>>93を採用する気か?それはなー(略

139:デフォルトの名無しさん
07/12/26 01:22:34
>>137
どいつもこいつも・・・ここはネタすれなのか?

140:デフォルトの名無しさん
07/12/26 02:24:13
>>138
え?あれじゃ駄目なんですか?人助けと思ってマジレスお願いします。

141:137
07/12/26 02:37:44
すまん、俺は素だったんだw
汎用性もたせるなら累乗関数使うなり作るなりしてくれ。
dim a as integer
for i=1 to 100
a = a + i * i '2乗
'a = a + i * i * i '3乗
next

142:137
07/12/26 02:39:07
>>140
ちゃんとみりゃわかる。
>>97はforが入ってるが結局は(1+100)/2*100だ。

dim sum as integer
for i=1 to 100
sum = sum + i
next

143:137
07/12/26 02:40:02
はぁい、>>93の間違いねorz
スレ汚し失礼しました。

144:デフォルトの名無しさん
07/12/26 03:36:07
志村ー
100じゃなくて20・・・・

145:デフォルトの名無しさん
07/12/26 13:27:24
>>141>>142
たびたびすいません。これらをメッセージボックスに表示するには
どうしたらいいんでしょうか?

146:デフォルトの名無しさん
07/12/26 14:22:26
Option Explicit
Sub sum()
Dim sum As Integer
Dim sumMsg As Integer
Dim i As Byte

For i = 1 To 100
sum = sum + i
Next i
sumMsg = MsgBox(sum, vbOKOnly + vbInformation)
If sumMsg = vbOK Then MsgBox "やったね"
End Sub


147:デフォルトの名無しさん
07/12/26 14:23:38
共有ファイルでVBAを編集するには?

148:デフォルトの名無しさん
07/12/26 17:17:49
inputboxをキャンセルしたときの挙動なのですが、
これじゃだめですよね・・・

Sub nicochuu()
niwango = InputBox("入力してね", "inputbox")
If niwango = "" Then MsgBox "入力無し": Exit Sub
Range("A1").Value = niwango
If niwango = vbCancel Then Range("A2").Value = "キャンセル"
End Sub


149:デフォルトの名無しさん
07/12/26 18:33:01
横で開いてるIEを3行スクロールさせる方法教えてください。
excelは2000でIEは7です。

150:デフォルトの名無しさん
07/12/26 19:14:15
三流文系大に通う腐女子です。
以下のマクロ作成方法を教えてください。

プロシージャ「斜め移動」の作成
IncrementLeftとIncrementTopを組み合わせた「斜め移動」という名称のマクロ作成。

プロシージャ「四角移動」の作成
図形が四角形を描くように移動する(移動の軌跡が四角形になる)、
「四角移動」という名称のマクロ作成。For文は”1から1まで”とする。

☆―→
↑   |
|   |
|   ↓
 ←―


プロシージャ「三角移動」の作成
「斜め移動」と「四角移動」を応用した、「三角移動」という名称のマクロ作成。
ただし正三角形でなくてよい。

151:デフォルトの名無しさん
07/12/26 22:22:06
>>133
どこかに不具合がある。例えば、暗黙的なセキュリティの問題に抵触してる。
ネットワーク上のファイルを開いての処理とか、クラスへのアクセスの仕方、等々。
エクセルは、何百MBのファイルでも、ページングしながらガリゴリ起動しようとしやがりますよ。


>>150
どう動かしたいかが良く伝わらない。
マクロを実行したら、画面上に既に設置してある部品を動かして元の位置まで戻したいの?
あと、移動の仕方に指定はないのか、部品は固定なのか、で、ここ重要、何が分からないの?


152:デフォルトの名無しさん
07/12/27 02:33:46
セルを複数選択できないようにする(単一セルのみ選択可能)にはどう記載すれば実現できますか?

153:デフォルトの名無しさん
07/12/27 11:43:39
CSVファイルにフッタが一行必ず入っているので、最終の行の一行前まで
読み込みさせたいのですが、

Do Until EOF(intFF)

をどうすればいいのかわかりません。
お願いします・・。

154:デフォルトの名無しさん
07/12/27 12:41:59
>>152
これで目的の動作をするかどうかはわからないが・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then
ActiveCell.Select
End If
End Sub

>>153
一行ずつ読んで、EOFに達していたらそれが最終行なので処理をスキップする。

155:デフォルトの名無しさん
07/12/27 15:21:44
>>153
ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。
ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては?
スレリンク(tech板)l50


156:デフォルトの名無しさん
07/12/27 15:59:23
サンクスコ
スレ違いの基準が分からんぽ

157:デフォルトの名無しさん
07/12/27 16:50:30
スレ違いとかいう奴うぜー
いっそVB6スレと統合しろ

158:155
07/12/27 18:25:58
>>156
>>2
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。


159:デフォルトの名無しさん
07/12/27 19:15:14
アルゴリズムとかはVB6だろうけど
初心者はわからんだろうしなあ
まあそのときの気分であしらってるけどね


160:デフォルトの名無しさん
07/12/27 19:16:58
>>154
サンクスです。


161:デフォルトの名無しさん
07/12/27 19:19:39
>>158

>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。
すべてこちらに包含するという考え方もある。

162:デフォルトの名無しさん
07/12/27 20:51:01
自治厨が湧いてきました

163:デフォルトの名無しさん
07/12/27 22:09:25
自治厨とは俺様ルールを貫いてスレを仕切ろうとする奴のこと
2chのルールやスレのルールを指摘するのは自治厨行為ではなく
逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について

164:デフォルトの名無しさん
07/12/28 02:04:11
どっちでもいい。はやく次の質問へ

165:デフォルトの名無しさん
07/12/28 09:36:53
>>2は別にこのスレの合意事項というわけではない。
過去スレのどこかで、誰かが勝手にテンプレに入れただけ。
なので、あまり気にするな。

166:デフォルトの名無しさん
07/12/28 09:43:01
そうでもないか

167:デフォルトの名無しさん
07/12/28 12:03:27
以下のケースでVBAの処理を止める方法は?(強制終了以外で

on error gotoでmsgboxに行く仕様になっているため、
あと50000回くらいmsgboxをokし続けなければならない。
escを押しても、msgboxのok扱いにしかならない。orz

168:デフォルトの名無しさん
07/12/28 12:14:00
電源断。

169:デフォルトの名無しさん
07/12/28 12:17:23
enterをテープで止めて、トイレ行ってる間に
終わってた。

170:デフォルトの名無しさん
07/12/28 12:27:46
msgboxのあとプロシージャをぬければいいんじゃね

171:デフォルトの名無しさん
07/12/28 12:31:09
もう実行しちゃった後の話よ

172:デフォルトの名無しさん
07/12/28 12:34:42
50000回ぽっちで抜けるならエラートラップの無限ループじゃないんだな
50000回押せばいいよな

173:デフォルトの名無しさん
07/12/28 12:48:51
>> 167
混じれ酢するとCtrl + Break

174:デフォルトの名無しさん
07/12/28 13:15:17
ありがとうござます
こんなキー初めて使うわ

175:デフォルトの名無しさん
07/12/28 13:25:13
>>174
押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。


176:デフォルトの名無しさん
07/12/28 15:12:43
良からぬsiteを見ている途中に、excelが勝手にsaveを始めて
あたふたすることってありますよね。

177:\_____________/
07/12/28 16:11:29
      ∨
   |/-O-O-ヽ| ブツブツ・・・
   | . : )'e'( : . |
   ` ‐-=-‐
   /    \
||\ ̄ ̄ ̄ ̄ ̄ ̄ \
||\\.          \      ∧_∧
||. .\\          \    ( ;´Д`) (オイ、なんか変なのがいるぞ)
.    \\          \ /    ヽ.
.      \\         / .|   | |
.        \∧_∧   (⌒\|__./ ./
         ( ´,_・・`)目合わせるなって ∧_∧
.         _/   ヽ          \  (     ) うわー、こっち見てるよ

178:デフォルトの名無しさん
07/12/28 18:52:13
セル範囲から検索できるactivecell.findみたいな関数ありませんか?

(D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが



179:デフォルトの名無しさん
07/12/28 18:53:12
ってここVBAのスレじゃん
失礼。出直してきます

180:デフォルトの名無しさん
07/12/28 22:22:11
いきなり長文にて失礼します。
生年月日の昭和・平成をまるで囲むため、中を透明にした楕円を描き、マクロの
自動記録でできた次のものを使用してきました。
ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5).Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Excel2000〜2003では、普通に使用できていましたが、2007では楕円の内部が
黒く塗りつぶされてしまいます。
ネットや本で調べてみたのですが、図形描画については記述があまり見つからず
私のスキルでは、難しそうです。
ご教授願えると助かります。


181:デフォルトの名無しさん
07/12/28 22:31:22
2007でマクロの自動記録すれば?

182:デフォルトの名無しさん
07/12/28 22:41:11
>>181
さっそくの書き込みありがとうございます。
やってみたのですが、2007では図形描画は自動記録できないらしいです。
私の調べた範囲では、どうやらExcel2007の仕様らしいです。
したがって、自分でマクロを組むしかないらしいのですが・・・


183:デフォルトの名無しさん
07/12/28 22:59:59
>>182
うーん、確かにその通りだった。ごめん。
ShapeRangeのプロパティをヘルプで調べるしかないかなぁ・・・

184:デフォルトの名無しさん
07/12/28 23:02:29
連投すみません、180 ですが・・・
ちなみに"Set"を使って、次のようなのも試してみましたがだめでした。

Set MaruShape1 = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5)
MaruShape1.Fill.Visible = msoFalse
MaruShape1.Fill.Transparency = 0#
MaruShape1.Line.Weight = 0.75
MaruShape1.Line.DashStyle = msoLineSolid
MaruShape1.Line.Style = msoLineSingle
MaruShape1.Line.Transparency = 0#
MaruShape1.Line.Visible = msoTrue
MaruShape1.Line.ForeColor.SchemeColor = 64
MaruShape1.Line.BackColor.RGB = RGB(255, 255, 255)


185:デフォルトの名無しさん
07/12/28 23:06:15
>>183
184の書き込みが、前後してすみません。
アドバイスありがとうございます。
ShapeRangeのプロパティについてヘルプを調べてみます。


186:デフォルトの名無しさん
07/12/28 23:31:32
>>180の最終行に
Selection.ShapeRange.Fill.Visible = msoFalse
を追加してもダメですか

187:デフォルトの名無しさん
07/12/28 23:41:45
>>186
ありがとうございます。うちのパソコンはExcel2007が入っていないので
明日、職場で確かめてみます。
ShapeRangeプロパティのヘルプのあたりは見てみたのですが、私のスキル
では、ちんぷんかんぷんです。
正直結構まいっています。
遅くまで、付き合ってくださってありがとうございます。
明日、結果を報告します。


188:デフォルトの名無しさん
07/12/29 01:32:16
うわー2007って全然違うな
うちのチームの人2007で納めるやつの動確2003でやってるけど大丈夫か?


189:デフォルトの名無しさん
07/12/29 11:10:53
>>188
おいおい、それは危険。 ウチは、2003で納めるため、テスト機を2007⇒2003にした。


190:デフォルトの名無しさん
07/12/29 11:38:28
2005と2007はどうとでもなりそうだが、
2002は.NET1.0、2003は.NET1.1だからいろいろまずいぞ。

191:デフォルトの名無しさん
07/12/29 11:39:16
>>190
ごばくった。なんとなく話題が似てた(笑

192:デフォルトの名無しさん
07/12/29 12:46:11
2007だとシェイプの位置がずれるんだけど、なんで?

193:デフォルトの名無しさん
07/12/29 23:05:11
>>186
昨日のアドバイスがヒントになって解決しました。

Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#

この2行を逆にしたらOKでした。ありがとうございました。


194:デフォルトの名無しさん
07/12/30 03:05:22
コマンドボタンを押すと、押したコマンドボタンを消したいのです。
CommandBotton1.visible=falseでも消えません。
CommandBotton1.BackStyle=0でも消えませんでした。
どのようにすれば消す、もしくは透明にすることができるのでしょうか?
よろしくお願いします。


195:デフォルトの名無しさん
07/12/30 03:26:42
>>194
Excel2000で試してみたが、
フォームのコマンドボタンでも、ワークシートのコマンドボタンでも、.Visibleで消せたぞ?


196:デフォルトの名無しさん
07/12/30 04:15:29
そりゃBottonで消えるのはボットン便所ぐらいですから

197:デフォルトの名無しさん
07/12/30 04:24:05
>>195
これなのですが、エラーがでてしまいます。
コマンドボタンを押したら、コマンドボタンを消す。
Private Sub CommandButton1_Click()
CommandBotton1.Visible = False
End Sub

198:デフォルトの名無しさん
07/12/30 04:25:09
>>195
ちなみに、ワークシートのコマンドボタンです。

199:デフォルトの名無しさん
07/12/30 04:35:52
>>196
解決しました。ありがとうございました。

200:デフォルトの名無しさん
07/12/30 11:34:38
ExcelVBAで出来ないことってなにかある?
高級言語覚えたい気持ちもあるんだけど
今のところやりたいことはVBAでできてるからあまり覚えようという気にならないんだよな
高級言語にステップアップしていいことあるかな?

201:デフォルトの名無しさん
07/12/30 11:56:55
Excelが無くても動くアプリが作れる

202:デフォルトの名無しさん
07/12/30 14:20:22
VBAは高級言語だぞ。
実行がExcelに縛り付けられていることは、言語自体の話とは別。

203:デフォルトの名無しさん
07/12/30 15:23:09
折れの場合、vs2005express で、やってみようとしたけど結局、VBAにしか、関心が集まらなかった。イメージがわきやすいからだと思う。

Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?

204:デフォルトの名無しさん
07/12/30 19:14:47
エクセルのVBAでゲーム作って来いって課題が出たんだが、インベーダーみたいのを作るとして
玉の発射とかの解説してるサイトって無いですか?
というか、シューティングゲーム作成の解説のサイトで良いのですが
なかなか見付からない・・・

205:デフォルトの名無しさん
07/12/30 19:27:53
ったく、専学はパーの製造装置でしかないな

206:デフォルトの名無しさん
07/12/30 19:30:28
>>204
学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w
素直に、マインスイーパみたいなヤツでいいと思うよ。

正直、オススメしないぞ。後で行き詰って困ることになる気がする。
ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。


207:デフォルトの名無しさん
07/12/30 19:42:39
>>206
いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw
敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど
あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと

208:デフォルトの名無しさん
07/12/30 19:58:57
excel2000のVBAで、材料一覧を印刷用にまとめる、材料表を作ったのですが
利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。

そこで、いろいろと原因を探っているんですが、質問です。
シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか?
ご教授願います。よろしくお願いします。

209:デフォルトの名無しさん
07/12/30 20:07:39
>>207
よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。
オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。


210:デフォルトの名無しさん
07/12/30 20:41:33
>>209
dクス
挑戦してみる^

211:デフォルトの名無しさん
07/12/31 10:27:56
今日も今日とて仕事でVBA

212:デフォルトの名無しさん
07/12/31 10:41:25
大晦日も仕事か
お疲れ様です

213:デフォルトの名無しさん
07/12/31 13:33:39
いい句だなぁ。

214:デフォルトの名無しさん
07/12/31 15:45:45
かなり微妙な手当てが出たお

215:デフォルトの名無しさん
08/01/01 01:20:24
myPath = "C:\TEST\*.xls"
If Dir(myPath) <> "" then
Kill myPath
End If
だとDir(myPath)がオープンしっぱなしになるそうです。
どう書けば閉じるのでしょうか?

216:デフォルトの名無しさん
08/01/01 02:36:50
>>215
オープンもしてないモノを、どうしろと?
意味が分かってないなら、せめて本人に書き込ませろ。
ところで、あけおめ。


217:デフォルトの名無しさん
08/01/01 03:14:41
>>215
解釈1
if FileExists("hoge") then Kill "hoge"

解釈2
myPath = "C:\TEST\*.xls"
TargetPath=Dir(myPath)
Do Until TargetPath= ""
Kill TargetPath
TargetPath=Dir()
Loop

オープンは関係ないけどこのどちらかがやりたいのではないかと予想

218:デフォルトの名無しさん
08/01/01 13:14:44
開いていないファイルに書き込みパスワードが掛かっているか
どうすれば判定できますか?

ファイルをパスワードで開いてからだったら、
If ActiveWorkbook.WriteReserved Then
とかで判定できると思うのですが、パスワードは
不明でその有無だけ判定したいのです。



219:デフォルトの名無しさん
08/01/01 15:52:29
>>216
知らないのか?
myPath = "C:\TEST\"
Dir(myPath)
RmDir myPath
してみろ。オープンされてるから


220:デフォルトの名無しさん
08/01/01 16:16:33
あけましておめでとうございます。
>>208についてお願いしたいのですが・・・

221:デフォルトの名無しさん
08/01/01 18:29:49
>>219
・・・・
RmDir myPath
そのまま実行してみろ
ヘルプ読んで出直せ

222:デフォルトの名無しさん
08/01/01 18:32:05
ポカーン

223:デフォルトの名無しさん
08/01/01 19:24:31
>>220
ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。
保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。
これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。


224:デフォルトの名無しさん
08/01/01 20:45:14
  1  2  3
1 10 20 30
2
------------
問題Y=1
問題X=1
回答Y=2
回答X=1

For i = 1 To 10
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) + Cells(問題Y, 問題X + 1), "問(i)")

回答X = 回答X + 1
問題X = 問題X + 1
Next
-------------
InputBoxにセル内の任意の数字(この場合"10+20")と表示させたいのですが、
上記のコードの場合、30と表示されてしまいます
セル内の数字を個別に表示させることは出来ますか?(真ん中に+などの記号を表示)
また、問1、問2と表示させていくためにはどうすれば良いのでしょうか?
この場合、問(i)で表示されてしまいます

225:デフォルトの名無しさん
08/01/01 20:53:20
+じゃなくて、&で結合すべし。
"問(i)"は、"問("&i&")"にする

226:デフォルトの名無しさん
08/01/01 21:05:59
>>225
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")")

にしたら出来ました^
即レスありがとうございました!

227:226
08/01/01 21:09:15
あ、問題X+2は問題X+1でした、失礼しました

228:デフォルトの名無しさん
08/01/01 21:28:11
>>223
そうですよね。VBAのテストをもっと増やしてみます。
ありがとうございます。

229:デフォルトの名無しさん
08/01/01 22:57:49
Excel 2003でXPです。
このプログラムを実行すると

Dim commission As Integer

Sub test8()
commission = 90
If commission = 100 Then MsgBox ("手数料は100円です")
End If
End Sub

コンパイルエラー
End ifに対応するブロックがありませんというメッセージが出ます。
どこが悪いのでしょうか?

230:デフォルトの名無しさん
08/01/01 22:58:28
thenでかいぎょうすべし

231:デフォルトの名無しさん
08/01/01 23:03:22
>>230
神様ありがとう!!!

232:129
08/01/02 02:53:03
>セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。

すみません何をどうやったらいいのか全くわかりませんorz
とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします

233:デフォルトの名無しさん
08/01/02 04:29:21
そもそもVBAの経験があるのかと・・・
VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに
URLリンク(homepage1.nifty.com)

234:デフォルトの名無しさん
08/01/02 12:20:38
VBA初心者が使う本でこういうときはどうすればいいのっ??ってやつで
お勧めは逆引きのやつとかですか?
他にいいのあります??

235:デフォルトの名無しさん
08/01/02 13:10:25
ググれば山ほどサンプルが出てくる

236:デフォルトの名無しさん
08/01/02 21:18:58
かんたんプログラミング Excel 2003 これが一番良かった

237:デフォルトの名無しさん
08/01/02 21:27:35
>>236
まじっすか!?
とりあえず見てみるわ。

>>235
図書館にも死ぬほどあったw

238:かな
08/01/03 11:25:29
Excelであみだくじつくりたいんやけど、どっかにサンプルないかな?
セルつかうんじゃなくてちゃんと線を引いてやりたいんや?

239:デフォルトの名無しさん
08/01/03 12:43:46
しね

240:デフォルトの名無しさん
08/01/03 13:59:10
こんにちは。突然ですが
いろいろ試してみたんですけど
VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?

241:デフォルトの名無しさん
08/01/03 14:03:50
全然不可能じゃないとおもうけど・・・

242:デフォルトの名無しさん
08/01/03 14:17:15
>>240にはってこと?

243:デフォルトの名無しさん
08/01/03 15:30:45
乱数って少数の端数が出てしまうじゃないですか。

244:かな
08/01/03 15:32:36
誰かおしえて?

245:デフォルトの名無しさん
08/01/03 15:56:29
ループさせたいだけなら一回目に発生させた乱数を変数に入れたら終わりな話だと思う

246:デフォルトの名無しさん
08/01/03 16:04:37
少数の端数てことはないだろ。

247:デフォルトの名無しさん
08/01/03 16:05:53
つCint

248:デフォルトの名無しさん
08/01/03 16:06:37
0になるだろ

249:デフォルトの名無しさん
08/01/03 16:10:19
CIntだろ

250:デフォルトの名無しさん
08/01/03 16:21:41
すごい釣りだなw

251:デフォルトの名無しさん
08/01/03 16:28:39
つMid(Rnd,3)

252:デフォルトの名無しさん
08/01/03 16:39:24
Replace(Rnd,".","")

253:デフォルトの名無しさん
08/01/03 17:02:32
Count = CInt(Rnd * N) + 1
hoge:
'ここで何かする
Count = Count - 1
If Count >= 0 Then
Goto hoge
End If


254:デフォルトの名無しさん
08/01/03 18:34:00
ループ中に乱数の値ってどんどん変わっていくんじゃない?

255:デフォルトの名無しさん
08/01/03 18:35:55
・・・。
>>254って本気で言ってるのか?

256:デフォルトの名無しさん
08/01/03 20:18:11
質問です。
実際に開発する環境はXP excel 2003で
学習環境はvista excel 2007なんですが、
何か学習書を購入するとき、2007に対応したものじゃないと
理解は難しいのでしょうか?
2007に対応したVBA書はまだ少ないように感じるもので・・・


257:デフォルトの名無しさん
08/01/03 23:17:50
確かに2007で変わった部分はある。でも基本部分(構文とかそういうの)は変わってない。
2007用の書籍があればそりゃいいだろうけど、変わった部分を調べておけば別に古いのでも問題はないかと。


258:デフォルトの名無しさん
08/01/04 02:25:11
構文規則(VB部分)は変わってないけど
オブジェクトメンバ(VBA部分)は結構変わったよ

一応古いメンバにもアクセス出来るようにはなってるが
新しいメンバより動作が遅かったりというデメリットもある

2007用だと新しい体系に関しての説明が主になるだろうから
実際の開発が2003なら、2003用か2002/2003/2007兼用版とかがいいかと

259:デフォルトの名無しさん
08/01/04 06:26:50
EXCEL2002でVBAを書いています。

マクロでセルにEXCEL関数を入力する際に、『シートの選択』ダイアログ[OK、キャンセル]が表示されます。
ダイアログを表示さない、もしくはダイアログのキャンセルを自動で押す方法はありますか?

セルに入力しようとしている文字列
='D:\[計算書.xls]20.1月'!$J$3
  計算書.xlsの20.1月は存在しません。

下記、3つは記述済みです。
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False

260:256
08/01/04 07:26:44
>>257-258
ありがとうございます。
詳しい解説があったほうがいいのでよく考えて選びます。

261:デフォルトの名無しさん
08/01/04 08:19:47
>>259
うちは出ない (2000, 2003)

262:デフォルトの名無しさん
08/01/04 08:31:34
>>259
どんなマクロを書いているんだ?

263:デフォルトの名無しさん
08/01/04 09:52:52
>>259
再現した。 ワークシートの存在を確認するしかないかな?
  Dim s As Worksheet
  For Each s In Me.Worksheets
    If UCase(s.Name) = UCase("20.1月") Then
      s.Range("A1").Value = "='D:\[計算書.xls]20.1月'!$J$3"
      Exit For
    End If
  Next
あるいは、可能であればワークシート別のイベントで処理させるとか。


264:かな
08/01/04 09:57:33
だれか教えてん♪

265:デフォルトの名無しさん
08/01/04 10:43:44
>>238>>244>>264
URLリンク(www.google.co.jp)
まぁ釣りだとは思うんだけど…

266:まな
08/01/04 10:52:16
>>264
手とり足とり、組んずほぐれつ?


267:デフォルトの名無しさん
08/01/04 17:41:29
すいません、XPでEXCEL2003です。
複数のセルに数式が入れてあるのですが、
その数式から導かれた値が、ある一定の値を超えた場合そのセル番号を表示させるプログラムを作ろうと考えています。

このようなことは可能でしょうか?
もし可能ならどのようなプロパティやメソッドを使えばいいのか教えてください。
後は本も買ってきたのでできるだけ自分でやりたいと思いますので、ヒントだけでもありがたいです。

268:デフォルトの名無しさん
08/01/04 17:44:47
>261
EXCELの設定で表示しないようにできるんですかね・・・。

>262
NW.Cells(tate, yoko).Formula = Replace(str_cell, this_Date, Nxt_Date)
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                ↑ ='D:\[計算書.xls]20.1月'!$J$3 が入る
                          ~~~~~~
                          ↑このシートは存在しない。
『シートの選択』ダイアログが表示される・・・。

>263
やっぱりダイアログが表示しますよね。ない場合シート作成させるしかないですかね・・・?

269:デフォルトの名無しさん
08/01/04 17:53:43
>>215
つOn Error

270:デフォルトの名無しさん
08/01/04 22:16:05
>>268
NW ?

271:263
08/01/05 11:58:51
>>268
シート作る必要があるの?
どうせエラー("#REF")になる式なんか入れないで、263の例みたいに空白のままじゃダメ?

>>270
どうせローカル変数名でしょ、New Worksheet の頭文字。てか、そこ突っ込まなくても・・・


272:デフォルトの名無しさん
08/01/07 17:08:47
XP、Excel2003で、改ページの枠を固定することはできるでしょうか。
この固定とは、保護等で管理者以外は触れないようにするということです。
ウィンドウの固定ではなく、改ページ範囲の固定です。

ご存知の方がいましたら、ご教授願います。

273:デフォルトの名無しさん
08/01/07 17:20:25
>>272 追記です。
結合したセルがあります。
そのセルに対する設定変更(書式、結合解除、フォント)は不可とし、
入力のみ可能とすることはできますか?

ご存知の方がいましたら、ご教授願います。

274:デフォルトの名無しさん
08/01/07 20:01:11
対象とするアクションが起こった場合にパスワード等を求めるとかじゃだめかな?


275:デフォルトの名無しさん
08/01/07 23:30:12
テキストボックスの余白自動設定解除に手間取った。
なんか簡単な方法ってないの?

276:デフォルトの名無しさん
08/01/08 08:29:16
「手間取ってる」ではなく「手間取った」ってことは
一応目的は達成されてるわけだよね

ではそれを提示してください
コード貼ってもブックをうpしても構いません
そしたらそれより簡単な方法があれば教えましょう

それが嫌ならさようなら

277:デフォルトの名無しさん
08/01/08 12:52:16
散々既出ぽい話題ですが、エクセルで、
先頭の0を消さずにcsvで書き出ししたいのですが、
以下の式では当然不可能で・・・

Option Explicit
Sub eight()
Dim eight As String
Dim bigeight As String

Range("a1").Value = 8
bigeight = Range("a1").Value + 100000000
MsgBox bigeight
eight = right(bigeight, 8)
MsgBox eight
Range("A2").Value = eight
MsgBox eight
End Sub

関数で同じことをやると出来るのですがゴミデータが出て、
コンマの数が変わってしまいます。

278:デフォルトの名無しさん
08/01/08 13:17:17
変数の型について勉強しましょう
文字列数値と数値の違いを理解しましょう
プロシージャ名と変数名を同じにするセンスを何とかしましょう



279:デフォルトの名無しさん
08/01/08 13:48:25
>>277
セルの書式設定(F) → 表示形式:ユーザー定義 → 種類(T):00000000 (8桁固定)


280:デフォルトの名無しさん
08/01/08 14:13:45
>>279
おお。
これをVBAで指定するには?

281:デフォルトの名無しさん
08/01/08 14:18:49
てか、そもそもセルに転記しなければ良いのか(・∀・;)

282:デフォルトの名無しさん
08/01/08 14:53:59
>>281
転記するにしても、セル(範囲)ごと持っていけば済むよ。
Range("A1").Copy Range("A2")


283:デフォルトの名無しさん
08/01/08 15:06:19
あ、表示形式ってマクロ記録できるんだ。
これで、解決・・・かな

284:デフォルトの名無しさん
08/01/08 15:24:41
礼も言えないゆとりであった

285:デフォルトの名無しさん
08/01/08 23:22:13
質問なのですが、ユーザーフォームの中に80コのテキストボックスを作りたい。
プログラムでループ文を使いテキストボックスを横に4×縦に20で一気に作る方法はありますでしょうか?


286:デフォルトの名無しさん
08/01/08 23:45:08
あります
LeftとTopを調整しましょう
コード教えては厳禁

287:デフォルトの名無しさん
08/01/08 23:50:48
調整とはユーザーフォームの設定ということですか?
プログラムだけで可能なのですよね?
もう少しだけヒントをお願いできないでしょうか?

288:デフォルトの名無しさん
08/01/08 23:55:08
別にそこまで厳しくせんでも。 Excel2003ではできる。
Set ctrl = Me.Controls.Add("Forms.TextBox.1")
って感じに追加して、ctrlのプロパティを調整する。
MSFormsに追加するのに、これでいいのか?という気もするが。


289:デフォルトの名無しさん
08/01/09 00:14:18
できました!あとは80コスペースを空けて作る方法を考えてみます。
288さん有難う御座いました。

290:デフォルトの名無しさん
08/01/09 00:16:15
丸投げを助長する
寄生虫が増殖する
らしいです

291:デフォルトの名無しさん
08/01/09 00:33:43
丸投げと、できるだけズバリなヒントを欲しているのとは確実に違うと思うわけだが。


292:デフォルトの名無しさん
08/01/09 14:20:42
278=284=290

293:デフォルトの名無しさん
08/01/09 14:30:40
しかし>>284には同意せざるを得ない

294:デフォルトの名無しさん
08/01/09 14:36:58
礼なんぞいらん。邪魔。

295:sage
08/01/09 14:47:15
IDが無いと誰が誰かワカラン

296:デフォルトの名無しさん
08/01/09 18:11:06
質問です。

Dim c1 as Collection
Dim c2 as Collection
Set c1 = New Collection
c1.Add "a"
c1.Add "b"
Set c2 = c1

この次に、
c1.Remove(1) 'c1の最初のアイテムを削除
とやるとc2のアイテムも"b"だけになりますよね。

これはたぶんc2が、c1と同じCollectionオブジェクトを
指しているためなんだな、と理解しています。

理解できないのは、c1.Remove(1)ではなく、
Set c1 = Nothing
とした場合です。

c2もNothingになるのかと思いこんでいましたが、
実際c2には、"a"も"b"も、ちゃんと残っていました。
これはなぜでしょうか?




297:デフォルトの名無しさん
08/01/09 18:25:52
a=1
b=a
a=0
にしてもb=0にならないのと同じ

298:デフォルトの名無しさん
08/01/09 18:27:51
「変数そのもの」と「変数が指す先」の区別を理解しませう。
set c1=nothingは、変数そのものへの操作で、変数が指す先にたいしては、
ほとんど影響しない。(唯一、リファレンスカウントにだけ影響するんだっけか。)

299:デフォルトの名無しさん
08/01/09 18:29:59
それはNothingキーワードが実体を解放するものではないため

300:デフォルトの名無しさん
08/01/09 19:41:42
数値の代入式の場合は、値そのものをコピーする。
オブジェクトの代入式の場合は、値を保存してある場所(参照)をコピーする。
なので、c1の要素を消すと、c2の要素も消えるが、
Set c1 = Nothing とした場合は、c1と値そのものとの関連が削除されるが、値そのものは残ってる。
全ての参照が削除された時点で、値そのものも削除される状態になる。


301:296
08/01/09 20:12:40
>>298
>>299
>>300
レスありがとうございました。
よくわかった、つもりです。
次のような理解でよろしいでしょうか...

Set c1 = Nothing によって、変数c1に格納された参照は削除される。
しかし参照先の実体を、まだ変数c2が参照している。
そのため、実体はメモリ上に存続する。
このあとで更に、Set c2 = Nothing とすると、
実体を指す参照がすべて無くなる。
すると、その実体が自動的に解放される。



302:デフォルトの名無しさん
08/01/09 21:28:25
質問なんですが、
セルの値(自動で変化する)が変わった瞬間に所定のコードを実行する(JavaScriptでいうところのonchange見たいな)、
と言うのは如何すればいいんでしょうか?

303:デフォルトの名無しさん
08/01/09 21:40:07
changeイベントを使えばいいよ

304:デフォルトの名無しさん
08/01/09 22:57:14
>>303
dクスです
なるほど、ワークシート単位ではチェンジイベントがあるんですね。
早速やってみます。

305:デフォルトの名無しさん
08/01/10 13:29:04
1から10000までの数字を全部掛けたときに
末尾に並ぶ0の個数を求めるのをVBAでおながいします

306:デフォルトの名無しさん
08/01/10 13:47:41
Excelどころか言語すら関係ないアルゴリズムの話か

>>305>>2★4

307:デフォルトの名無しさん
08/01/10 13:51:31
>>305
というか桁数が膨大になるので計算機を使っても無理かと。
代数的な解法があるんじゃないですか?数学板の質問スレに質問しては?

308:デフォルトの名無しさん
08/01/10 14:02:10
じゃあ100まででもいいです

309:デフォルトの名無しさん
08/01/10 14:07:59
>>307
アルゴリズム次第では桁数は膨大にならないよ
だって総桁数を調べるのではなく、0の数を数えるだけだから

なんにしろスレ違いだけど

310:デフォルトの名無しさん
08/01/10 15:05:43
セルのコピー、ペーストをvbaで行った後に、コピー元のセルを囲っている
網のようなラインが消えないのですが、これをvba内で
解除するにはどうすればいいでしょうか。

311:デフォルトの名無しさん
08/01/10 15:26:51
>>310
Application.CutCopyMode = False

これはちゃんとExcel VBAの質問だな

312:sage
08/01/10 15:31:47
>>311
お、早速
ありがとうございます

313:デフォルトの名無しさん
08/01/10 16:28:25
オートフィルタを使ってデータベースの集計をしているのですが

1列目 2列目  3列目
A   B    タイトル

という風になっています。1列目と2列目は評価項目でA,B,C,D,E,Fのいずれかが記入されています
現在これをカウントしているVBAが、

3行目をオートフィルタで集計したいタイトルで搾り出す
1行目をAで抽出後、SubtotalでAの数をカウント
2行目をBで抽出後、Subtotalで…

となっています。昔はこれで十分だったのですが、次第にタイトルが増えてきて
全部やるとなると膨大な時間がかかるようになってきてしまいました。
1つのタイトルに付き単純に12回抽出→数えるとやっているので…

いちいちAで抽出→数える、Bで抽出→数える…と繰り返さずに、
タイトルで絞った後にCoutIFのようにAはいくつ、Bはいくつみたいな具合でやる方法はないでしょうか?
CountIFだと非表示のセルのA〜Fまで集計してしまって困っています

314:デフォルトの名無しさん
08/01/10 16:39:34
よーわからんけど..

Sub hogera_vs_mogera()
For i = 1 To 8
hoge = Range("A" & i).Value
If hoge = "A" Then hoge_counter = hoge_counter + 1
Next i
MsgBox hoge_counter
End Sub


315:デフォルトの名無しさん
08/01/10 18:11:37
>>313
ピボットテーブルレポート使ってみて。


316:デフォルトの名無しさん
08/01/10 19:41:52
セルに名前が "hoge"
とついてる場合
range("hoge").value = "ほげほげ"
と操作できますが

この名前 "hoge" の行 列の値を得る方法を
教えて下さい hogeが(1,5)なら
int row = 1
int col = 5
のように得たいです。


317:デフォルトの名無しさん
08/01/10 19:56:30
Range("hoge").Row
Range("hoge").Column

318:デフォルトの名無しさん
08/01/10 23:06:12
質問なのですが、
Public Type SyainData
  Id As Long
  Name As String
End Type

Dim Kyo(5) as SyainData
と宣言しループ処理で関数の引数として2番目のNameを渡したいのですがどうすればいいですか?

319:デフォルトの名無しさん
08/01/10 23:19:01
Kyo(2).Name

320:デフォルトの名無しさん
08/01/10 23:23:03
319さん、ByRefコンパイルエラーと表示されます。

321:デフォルトの名無しさん
08/01/10 23:26:15
319さん
ちなみにAユーザーフォームからNameに入力して
標準モジュールに定義してある構造体にそれぞれ格納した値をBユーザーフォームに出力したいのです。

322:デフォルトの名無しさん
08/01/11 00:19:38
関数の呼び出し方と、関数の定義くらい書いたら? (先頭の、Sub/Function〜の行)
判断する情報が少なすぎる。


323:316
08/01/11 09:24:37
>>317
ありがとうございました(^▽^)

324:デフォルトの名無しさん
08/01/11 10:14:12
VBAで実行中に「vbcritical」と共に、「400」って
数字が表示されるエラーはなんですか?

325:デフォルトの名無しさん
08/01/11 14:21:13
msgboxやinputboxの外観をもっと可愛くしたい!

326:デフォルトの名無しさん
08/01/11 14:33:31
スマン連投・・・
>>325はどうでもいいです

VBAを含むxlsを「共有」した途端に、そのvbaの挙動が微妙に変わってしまいました。
vbaの内容は、セル範囲をrangeで指定して、最下行にペーストするだけなんですが・・・。
なんか、ちょっとずれる感じなんです。ウィンドウの固定が原因かも。

共有と同時にVBAがロックされるので、原因の確かめようが無い状態(T-T

327:デフォルトの名無しさん
08/01/11 15:27:54
質問の仕方すら何かズレてるみたいだし、しょうがないね。 そういう星の下に生まれたんだよ。


328:326
08/01/11 16:19:52
共有の関係で、ペースト先の結合がバラバラになった模様・・・orz
こればっかりはどうしようもないですかね

保護されたセルに書き込むというのはvbaで何とかなりましたが・・・

329:デフォルトの名無しさん
08/01/11 16:48:30
>>325
つAssistant

330:デフォルトの名無しさん
08/01/11 18:07:53
>>329
なるほど、カイル君が使えるんですね・・・
ありがとうございます

331:デフォルトの名無しさん
08/01/11 19:37:54
>>328
このスレはオマイの進捗報告書かと


332:デフォルトの名無しさん
08/01/12 13:39:08
winxpでExcel2003を使用しています。

VBA-Editorからの実行は正常で、ワークシート上のコマンドボタンからの実行だと
時々、Excelが強制終了します。
コードは変えていないのに、上記の状況が発生しないときもあります。

バグだと思うのですが、発生しない時もあるので、原因がつかめません。
そんな事ってありますか?

333:デフォルトの名無しさん
08/01/12 13:49:06
>>332
あるよ。何か、以前にも出てたと思う。
クラスをインプリメントして、何かややこしいことしようとしてるヒトが居て、
エラーが出たり出なかったりするという話があった。基本的にはそれと同じ系統の問題では?


334:デフォルトの名無しさん
08/01/13 01:40:25
winxpでExcel2003を使用しています。
以下のコードは、都道府県ごとに1枚のデータシートを作成する処理なんですが、コードが1行づつどんな作業を意味しているのかがわかりません。
1行ごとにどのような処理をしているのかの説明をよろしくお願いします。長文で申し訳ありません。

Sub まとめ()
Dim i As Integer 'カウンタ変数iの宣言
Dim n As Integer 
Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言
Dim MyC As Worksheet

Worksheets.Add before:=Worksheets("全国")
ActiveSheet.Name = "data"
Set MyS1= Worksheets("data")
With Worksheets("全国")
MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value
End With

i=12
For Each MyC In Worksheets
If MyC.Name<> "data" Then
n = 12
MyS1.Cells(i,1)=MyC.Name
i=i+1
Do While MyC.Cells(n,2).Value<>""
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value
i=i+1
n=n+1
Loop
End If


335:デフォルトの名無しさん
08/01/13 01:45:30
Sub まとめ()←死ね
Dim i As Integer 'カウンタ変数iの宣言←死ね
Dim n As Integer ←死ね
Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言←死ね
Dim MyC As Worksheet←死ね
←死ね
Worksheets.Add before:=Worksheets("全国")←死ね
ActiveSheet.Name = "data"←死ね
Set MyS1= Worksheets("data")←死ね
With Worksheets("全国")←死ね
MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value←死ね
End With←死ね
←死ね
i=12←死ね
For Each MyC In Worksheets←死ね
If MyC.Name<> "data" Then←死ね
n = 12←死ね
MyS1.Cells(i,1)=MyC.Name←死ね
i=i+1←死ね
Do While MyC.Cells(n,2).Value<>""←死ね
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value←死ね
i=i+1←死ね
n=n+1←死ね
Loop←死ね
End If←死ね


336:デフォルトの名無しさん
08/01/13 04:26:19
こんなひどい丸投げを久しぶりに見た・・・

337:デフォルトの名無しさん
08/01/13 05:08:47
replace "\n" "←死ね\n"

338:デフォルトの名無しさん
08/01/13 05:10:22
>>334
随分酷いコードだな
VBA始めて3日くらいの奴が書いたコードだろ

こんな下劣なコードの説明なんてまっぴらだぜ

339:デフォルトの名無しさん
08/01/13 14:25:58
ある意味、微笑ましいコードだなw  VBならでは、とでも言うか。


340:334
08/01/13 14:39:48
わからないのなら、レスくださらなくて結構です。
わかる方のみでお願いします。

341:デフォルトの名無しさん
08/01/13 14:58:48
>>340
どうもすみません・・。

342:デフォルトの名無しさん
08/01/13 15:17:23
要はググれということだ

343:デフォルトの名無しさん
08/01/13 15:18:17
>>340
判るんだけどさぁ、それを説明するのはスレ違いだし、そもそも野暮だろ?


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

4745日前に更新/253 KB
担当:undef