●EXCEL・VBAの教えてスレ Part2●at TECH
●EXCEL・VBAの教えてスレ Part2● - 暇つぶし2ch331:デフォルトの名無しさん
07/02/20 11:39:42
>>329
クラスを使え


>>330
メニュー > デバッグ > VBAProjectのコンパイル
も知らんのか?

>>329なら普通に実行したってコンパイルエラー出るし。
もしかしてexe吐くことがコンパイルだと思ってるのかな?

332:デフォルトの名無しさん
07/02/20 12:08:03
>>331
クラスってどうつかえばいいのですか?
プロジェクトで挿入からクラスモジュールを挿入して、
Type文を打ち込めばよろしいのでしょうか?

それと、ここはsage推奨ですか?

333:デフォルトの名無しさん
07/02/20 12:16:50
>>332
===== MyTestClass As クラスモジュール =====
Public ID As Integer
Public Name As String
===== EOM =====

===== Module1 As 標準モジュール =====
Sub test()
  Dim a(3) As New MyTestClass
  a(0).Name = "hoge"
  a(0).ID = 10
  i = TypeTest(a)
End Sub

Function TypeTest(a() As MyTestClass) As Integer
  Debug.Print a(0).Name
  Debug.Print a(0).ID
End Function
===== EOM =====

こんな感じで。
クラスモジュールの名前がAs ~で使う宣言型になる点に注意。

> それと、ここはsage推奨ですか?
別に。回答者はageる必要が無いから慣例的にsageてるだけ。

334:デフォルトの名無しさん
07/02/20 13:40:38
>>333
どうもです。

335:327
07/02/21 02:04:24
マクロで記録したら文字列で指定してたからどうしたもんかと
思いましたが、addressでセル位置の座標を取れるからこれ使えばいいのかな。

問題は解決したけども、なんかほかにスマートな方法があるなら教えてくだされ。

336:デフォルトの名無しさん
07/02/21 15:31:21
GetOpenFilename で「ファイルを開く」 ダイアログ
で左側のデスクトップやマイドキュメントが選べません。どうしてでしょうか?
参照設定で、Microsoft Runtime Scriptingは選択しています。
Office2003, XP Proです。

337:デフォルトの名無しさん
07/02/21 15:49:59
> どうしてでしょうか?
環境が壊れてるからじゃねーの?
とりあえずOSとOfficeを再インストールしてみな。

それとGetOpenFilenameはApplicationオブジェクトのメンバなんで参照設定は不要だし、
Microsoft Runtime Scriptingではなく
Microsoft Scripting Runtimeだろ。これはFSOやDictionaryだからな。

338:デフォルトの名無しさん
07/02/22 15:30:03
  row = 1
For Each a In IEobj.Document.body.getElementsByTagName("A")
If InStr(a.href, "URLリンク(xxx.com)) <> 0 Then
x = a.href
Worksheets(1).Cells(row, 1).Value = x
row = row + 1
End If
Next a
こんな感じのURLなのですが、同じアドレスは二度書き込まない風にできますか?

339:338
07/02/22 18:01:47
処理重くなるだけかな
少しぐらい重なってもいいか・・・・

340:デフォルトの名無しさん
07/02/22 19:58:29
>>338
普通に重複チェックして条件分岐すれば良いだけでしょ。
重複チェックにはいろんな手法があるのでお好きなもので。

341:デフォルトの名無しさん
07/02/23 22:15:30
Dim myValue As Single
myValue = 1.0
Charts(1).Name = "Ver. " & myValue

としてエクセルのグラフのタイトルに、 Ver. 1.0 と入力したいのですが、Ver. 1 となります。
こういう場合は、どうすれば "1" を "1.0" と少数点付きにできますか?

342:デフォルトの名無しさん
07/02/23 22:27:30
As String にするか
"Ver." & Format(MyValue, "0.0")で

343:デフォルトの名無しさん
07/02/23 22:52:10
>>342
ありがとう!!!
できた~!!!!!

ちなみにStringはダメでした。

ほんとにありがとう。

344:デフォルトの名無しさん
07/02/23 23:15:34
ああ、"1.0"にしないと駄目だろうねw


345:デフォルトの名無しさん
07/02/24 01:29:23
Win2000 SP4ではちゃんと動いていたのにXP SP2に持っていったらエラーにはならないんですけどまともに動いてくれません
主に使っている機能はActiveXのInetです。WEBを取り込んで検索して加工した文字列をエクセルに貼り付けてるだけです。

参照設定は正規表現というやつを使いたくて、MSVBScriptRegulerExpresion1.0と5.5を二つ入れました。
1.0と5.5は両方チェック入れたらまずいんでしょうか?本にはMSVBScriptを参照設定しろと書いてあっただけなので不明です。

あとMS Internet Transfer Control 6.0とMS Internet Controls も参照設定してあります。

Win2000 SP4はVB6.0、WinXP SP2はVB6.0ランタイムが入ってます。

最初から2行あったOption Explicit ?ともう一行は文の意味がわからなかったので消しました。

XPのファイアーウォールははずしてあります。

なぜXPだけで不安定になるのか原因わかりますでしょうか?

346:デフォルトの名無しさん
07/02/24 01:33:32
うん、わかる

347:デフォルトの名無しさん
07/02/24 01:37:51
ありがとうございます。試してみます。

348:デフォルトの名無しさん
07/02/24 14:27:41
エラーの時にデバッグを選んだ後停止ボタンを押すと、フォームがひらくのですが、コード画面のままで維持できないのでしょうか?
その度にいちいちコード画面を選び編集したいコードの行を探さないといけないのはつらいです。

349:デフォルトの名無しさん
07/02/24 15:09:31
'初心者です。


Sub なんでだろう①()
Dim あ As Long
あ = Worksheets("Sheet1").Cells(1, 1)
If あ > 3 Then
Worksheets("Sheet1").Rows("1:5").Select
End If
End Sub

'だと動くのに

Sub なんでだろう②()
Dim あ As Long
あ = Worksheets("Sheet1").Cells(1, 1)
If あ > 3 Then
Worksheets("Sheet1").Rows("1:あ").Select
End If
End Sub

'だと動きません。なんでだろう。。。
'親切な方教えてください。


350:デフォルトの名無しさん
07/02/24 15:37:02
range("1:" & あ)では?

351:デフォルトの名無しさん
07/02/24 15:48:27
>>349
×Worksheets("Sheet1").Rows("1:あ").Select
○Worksheets("Sheet1").Rows("1:" & あ).Select
○Worksheets("Sheet1").Range("1:" & あ).Select
○Worksheets("Sheet1").Rows(1).Resize(あ).Select

>>350
このコードを書いているモジュールによってはシートを省略しちゃうと正しく動作しないよ。
「Worksheets("Sheet1")」も書くか、「Rows以降を」と添えよう。

352:349
07/02/24 15:49:50
>>350
ほえ~。動きました。
なぜだか分からないけど、とにかくこれでやってみます!
ありがとうございました!

353:デフォルトの名無しさん
07/02/24 16:05:06
>>351
あ、RowsのつもりがRangeって打っちゃったよ

354:349
07/02/24 16:09:47
>>351
とにかくいろいろやり方があるんですね!
どうもでした。m( )m

モジュールって何?っていう段階なので、すべてがサッパリ妖精なのですが、
とにかく理解もせずに突き進んでみることにして見ます。。。

355:デフォルトの名無しさん
07/02/24 19:58:05
エクセルのグラフの軸の書式設定にある
Y/数値軸目盛の最大値のところに初期入力してある値を取得する方法ってありませんか?

356:デフォルトの名無しさん
07/02/24 20:22:45
初期値は自動じゃないのか?
まぁ、マクロ記録で変更してみりゃプロパティの名前がわかるだろ。

357:デフォルトの名無しさん
07/02/24 20:35:27
>>356
自動です。
自動で入る初期値がほしいんですが、これに関しては
マクロ記録でいろいろ試してみましがはわかりませんでした。

358:デフォルトの名無しさん
07/02/24 20:53:07
>>357
初期値変更するの記録すればわかると思うけど
ActiveChart.Axes(xlValue).MaximumScale
じゃない?

359:デフォルトの名無しさん
07/02/24 21:14:35
>>358
ありがとうございます。
値の取得ができました。
初期値変更するの記録したつもりだったけど、わからなかったw

360:デフォルトの名無しさん
07/02/25 14:25:00
あぁ~ん、ユーザーフォームがうまく作れないよぉ~~~ん!!

参考書ばかりが増えていく…

361:デフォルトの名無しさん
07/02/25 14:29:14
わざわざユーザーフォーム作る香具師って馬鹿じゃね?
プログラミング能力の無さをさらけ出してるだけだよ。

362:デフォルトの名無しさん
07/02/25 16:08:29
馬鹿が馬鹿を笑う、ここはそんなスレでつw

363:デフォルトの名無しさん
07/02/25 17:30:50
>>361
kwsk

364:デフォルトの名無しさん
07/02/25 22:30:07
ユーザーフォームを×ボタンをクリックして閉じるときに、
それと同時に上書き保存をしたいのですが
何か良い方法はありますか?

365:デフォルトの名無しさん
07/02/25 22:33:26
>>364
UserForm_QueryCloseイベントに上書き保存のコードを書く


366:デフォルトの名無しさん
07/02/26 02:57:29
動作しないユーザーフォームなら1分もかからずにちゃんと作れるよな。
これすらできないのは才能ないというかなんか根本的におかしい。

367:デフォルトの名無しさん
07/02/26 04:05:54
>>361
の言ってる意味は全然変わらんが

>>366
なら分かる

368:デフォルトの名無しさん
07/02/26 04:55:40
じゃ、>361はこう訂正してみよう。
>わざわざユーザーフォーム作る香具師って馬鹿じゃね?
→ユーザーフォーム作るのに苦労する香具師って馬鹿じゃね?

369:デフォルトの名無しさん
07/02/26 05:03:58
>>368
納得した
ユーザーフォーム使う使わないは用途によるからな

370:364
07/02/26 10:09:54
>>365
ありがとうございます!できました!
>>361
仕入・納品・在庫調べ等々、自分の仕事では
ユーザーフォームないと非常に入力がめんどくさいです。
なので自力で作成しました。
まあ、「市販のソフト買えよ!」と言われればそれまでですが。

371:デフォルトの名無しさん
07/02/26 10:34:35
>>360がやろうとしてることと、>>361,>>366,>>368が指摘してることに遥かなる距離感を感じるのはなぜだろう。

>動作しないユーザーフォームなら

わざわざ動作しないフォームを作る暇人っているんだな。

372:デフォルトの名無しさん
07/02/26 11:47:50
>>370
まさかそれをアクセスでなくエクセルでやってるとか・・・

373:デフォルトの名無しさん
07/02/26 11:58:21
Excelが伝票というケースもあるだろ。Accessの仕事しかやったことないのか

374:デフォルトの名無しさん
07/02/26 20:15:30
Cellの中に文字列があって、その文字列の長さを取得するにはどうすればいいか教えてください。
文字変数の長さの取得方法がわかりません。

375:デフォルトの名無しさん
07/02/26 20:27:35
>>374
Len

文字変数の長さって何?

376:デフォルトの名無しさん
07/02/26 20:40:36
>>375
説明がまずかったですね
たとえば、
a As String
b As Integer

a = "ABC" または a = Range("A1").Valueとして、このA1セルに"ABC"が入っているとします。
それで、 b をこの a の中に入っている文字列の長さの値を入れたいわけです。この場合は3になるわけですが
どうすれば b = 3 とすることが出来るかがわかりません。


377:デフォルトの名無しさん
07/02/26 20:46:05
>>376
答え書いてあるやん

378:デフォルトの名無しさん
07/02/26 20:55:51
b = Len( a )

まあいろいろ期待どおりに動作しない場合も多いがね。
b = LenB(a )

内部がEUCなのでバイトカウントでも(ry

379:デフォルトの名無しさん
07/02/26 20:55:59
>>377
すいません。見落としていました。
>>375
ありがとう
はぁ、なんか疲れてるみたい・・・

380:デフォルトの名無しさん
07/02/26 21:02:18
「文字列の長さ」を「文字変数の長さ」と言い換えたのは
意味があるのかと…思ったわけです。
深く考えすぎたか_| ̄|○

381:デフォルトの名無しさん
07/02/28 15:39:38
マルチすみません。
情報が少ないですが以下の現象で困っております。
環境 WindowsXP Excel2003

エクセルのVisual Basic Editorで社内作成のコントロール(VB6にて)
をはりつけ、その後エクセルを終了すると必ずメモリがReadに・・・
のエラーがでてしまい困っています。あと2時間ほどで調べないといけない
のですが。。。誰かご教授お願いします。

382:デフォルトの名無しさん
07/02/28 15:49:07
> 社内作成のコントロール
の問題を聞かれても、どうにもならんわな。

聞きたいなら最低限そのコントロールのソースを晒せ。
それが出来ないなら自社内で解決しろ。

383:デフォルトの名無しさん
07/02/28 16:00:10
社内掲示板で2ちゃんねる使ってるなんてユニークな会社ですねー

384:デフォルトの名無しさん
07/02/28 17:21:49
dim page as long
URL="http:xxx.com/&page="+cells(x,x)+"&main=
だとエラーは出ないんですが
URL="http:xxx.com/&page="+1+"&main=

URL="http:xxx.com/&page="+page+"&main=
だと型が一致しません13Errorとでるのですが、なぜでしょうか


385:デフォルトの名無しさん
07/02/28 17:27:54
URL="http:xxx.com/&page=" & 1 & "&main="
URL="http:xxx.com/&page=" & page & "&main="


386:デフォルトの名無しさん
07/03/02 02:08:55
objIE.document.forms.Item(0).ID.Value = "ID"
objIE.document.forms.Item(0).PASS.Value = "PASS"
objIE.document.forms.Item(0).submit().Click
これで自動ログインさせたいのですが、ログインするこそはするんですが、
objIE.document.forms.Item(0).submit().Click
の行をデバックで過ぎると

オブジェクトが必要です。(Error 424)
と言うエラーが出てしまうのですが、なにか解決方法はありませんか

387:デフォルトの名無しさん
07/03/02 02:12:50
すみません、書き込んでから気づきました。().Clickが不要だったんですね('A`)
スレ汚しすみませんでした

388:デフォルトの名無しさん
07/03/02 06:55:43
毎日入力するデータを別シートに自動保存して
何日か溜まったら分析したいのですが

例)

3月2日に "Sheet1" の A10 ~ A20 に整数のデータを入力する

コマンドボタンをクリックすると
そのデータが "Sheet3" の 3月2日の列 ( AH10 ~ AH20 ) にコピーされる

翌日、3月3日に "Sheet1" の A10 ~ A20 に整数のデータを入力する

コマンドボタンをクリックすると
そのデータが "Sheet3" の 3月3日の列 ( AI10 ~ AI20 ) にコピーされる

また翌日・・・

という感じに、Sheet1の同じ範囲のデータをSheet3に、日にちごとにずらしてコピーしたいのですが
どうすれば良いのでしょうか?教えて下さい


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch