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


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

Excel VBA質問スレ Part5



1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ]
ExcelのVBAに関する質問スレです

質問前に 【 >>2-3 】 あたりを良く読むこと

前スレ
pc11.2ch.net/test/read.cgi/tech/1189814602/

411 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:25:45 ]
VBA実行してからまたきてね♪


412 名前:デフォルトの名無しさん [2008/01/18(金) 12:31:44 ]
ありがとうございます!
いえ、multiuserediting の存在を知りませんでした・・

413 名前:397 mailto:sage [2008/01/18(金) 14:55:18 ]
>>398,>>399さん、判りました。自分でもまた試してみます。
ありがとうございました。

414 名前:デフォルトの名無しさん [2008/01/18(金) 18:11:23 ]
使えねーな

415 名前:デフォルトの名無しさん [2008/01/18(金) 19:41:23 ]
Worksheet_Changeで対応できない書式の変更にリアルタイム反応するためユーザーが入力した書式などをリアルタイム監視するプログラムを作成したところ、終了条件の問題に突き当たり処理に悩んでます。

'-----------------------------

Private EndFlg As Boolean

Sub Worksheets_Activate
EndFlg = False
Call 監視処理
End Sub

Sub Worksheets_Deactivate
EndFlg = True
End Sub

Sub 監視処理
Do
(処理)
DoEvents
Loop Until EndFlg = True
End Sub

'------------------------------

このようなものが、ほとんどのワークシートに書いてある状態です。
Loop Until EndFlg = True の直後にメッセージボックスを設け確認したところ、Worksheet_Activateのあるシートに移動するとその場では終了せず、Activateのないシートに移動した瞬間に終了します。
たとえばActivateのあるシートA、BとActivateのないシートCがある場合
A→C、B→Cは正常な終了が確認できるのですが
A→B、B→Aは終了メッセージが出ません。
A→B→A…を延々繰り返したあとにCを選択すると、終了メッセージがA⇔Bした回数に比例して複数出るため多重起動であると断定できました。

Activateのないシートをはさまずに開放する方法ありませんでしょうか。

416 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 20:16:17 ]
TextBox1の入力に応じてlistboxの内容を決め、
クリックされた項目とTextBox1の入力を考慮して
TextBox2の内容を決めるということをやろうとしています。
後述のように書こうとしました。

Private Sub TextBox1_Change()
'入力に応じてワークシートからhaniにアドレスを取り出す
以下略
With UserForm1.ListBox1
.ColumnCount = 1
.RowSource = hani.Address
End With
End Sub

Private Sub ListBox1_Click()
'先ほどの入力とリストの結果からテキスト2の内容を決める。
UserForm1.TextBox2.Value = 以下略
End Sub

このようにするとPrivate Sub TextBox1から
Private Sub ListBox1_Click()に受け渡されるのは
haniの内容だけで、それ以外の変数を渡そうとしても
上手くいかず困っています。callの構文を使えば良いのでしょうか?
色々調べてみても判らずどなたかアドヴァイス頂けると嬉しいです。

417 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:25:58 ]
初歩的ですみません。
VBAで、あるセル範囲にある数式の答えを出力するにはどうすればいいんでしょうか?

Range("A1:A5")="b2/2+b5"みたいにすると数式がそのまま出力されるし・・・

418 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:31:50 ]
>>417
それが初歩的だとわかるぐらいならじゅうぶん中級車さ

419 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:32:42 ]
>>415
ループが入れ子になってると思う。
監視処理を各シートにを書くんじゃなくて、どこか一枚に

Sub 監視処理
 Do
  if !SheetA.EndFlg(0) = False Then (処理)
  if !SheetA.EndFlg(1) = False Then (処理)
   ・・・
  DoEvents
 Loop Until 監視終了=True
End Sub

とか何とか書いて、実行しておけばいいんじゃないかな?


>>416
言ってる意味がよく判らないけど、
TextBox1_Change()内で使ってる変数を、ListBox1_Click()内でも使いたい、
と言う事なら、グローバル変数でも使えばいいんじゃないの?


>>417
Range("A1:A5") = "=b2/2+b5"



420 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:11:24 ]
>>415
DoEvents ステートメントは、ウィンドウズメッセージとイベントプロシージャの処理が終わるまで
戻ってこないから、多分、AのDeactivate⇒即座にBのActivateが走ってる状態。
ちょっと構造を見直した方がいいかもね。


421 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:14:35 ]
OS XP、Excel2003

普段は、VBエディタから 挿入 → 標準モジュール で
Module** といったファイルを作成してコードを書いています。

このModule** というファイルを自分の好きな名前にするのにはどうしたら良いのでしょうか?

422 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:25:27 ]
右クリックの名前を変更かF2でできたと思う。

423 名前:421 [2008/01/19(土) 19:16:55 ]
>>422
ご解答ありがとう御座います。
しかし、右クリックしても「名前を変更」が見つかりません。
また、F2ではオブジェクトブラウザという表示になるのですが
名前を変更する方法がわかりません。

分かる方みえましたらお願いします。

424 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:22:37 ]
>>423
プロパティウィンドウ→オブジェクト名を変える

425 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:23:18 ]
>>423
プロパティウィンドウの、(オブジェクト名)を変更すると変わる。


426 名前:416 mailto:sage [2008/01/19(土) 21:26:44 ]
>>419 ありがとうございます。グローバル変数にしたら解決しました。

また基本的な質問ですみませんが
マクロを起動した瞬間にリストboxに
候補を表示させようとしました

Private Sub UserForm1_initialize()
Set com1_r = Range("A1:A5")
With UserForm1.ListBox2
.ColumnCount = 1
.RowSource = com1_r.Address
End With
End Sub

のように書いても表示されません。
他のPrivate Sub TextBox1_Change()等に
書いた時は表示されるのですが
一体何が誤っているか御指摘頂けませんでしょうか?

427 名前:421 [2008/01/19(土) 21:29:38 ]
>>424
>>425
教えて頂いた方法で出来ました。
大変ありがとう御座いました。お二人に幸あれ。

428 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:56:53 ]
>>426
そのコードをそのままこちらで実行してみたけど、問題なく動いたよ。
何か別の場所でミスしてるんでは?

例えば、
値を表示させたいリストボックスのオブジェクト名が ListBox2 ではなく ListBox1 だった、とか
代入元のセル A1:A5 の値がマクロ起動時には空白だった、とか。

今一度、確認すべし。

429 名前:質問 mailto:sage [2008/01/19(土) 22:40:54 ]
Visual Basic Editerの画面で何かの拍子に下記のように
操作パネルが統合されなくなってしまいました。
どうすれば元通りにできるでしょうか?よろしくお願いします!

members.at.infoseek.co.jp/skypp/AAAAA.jpg



430 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:08:09 ]
>>428 Private Sub UserForm1_initialize()
だとgeneralになっていたので
Private Sub UserForm_initialize()
に直すとUserFormになって動きました。
作ってるのはUserForm1なのに不思議ですね。
ともかく有難うございました。

431 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:51:21 ]
>>430
画面のコントロール以外(フォーム、クラス等)のイベントプロシージャ名は、
オブジェクト名に影響されないハズなんだけどね。何でだろ?

でも、言われてみれば違和感あるよな。今気づいたw


432 名前:429 mailto:sage [2008/01/19(土) 23:52:15 ]
自己解決しました。
プロジェクトエクスプローラで「ドッキング可能」にしたら直りました。
下記にも載ってました(^^)
www2.moug.net/bbs/exvba/20071226000034.htm

433 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:52:47 ]
>>429
メニューの、ツール ⇒ オプション ⇒ [ドッキング] タブ を確認してみて。


434 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:16:46 ]
>>400
47個あるシートから1つのdataと言う名前のシートに集計したい場合は多分これです。

Sub test()
 Dim ws As Worksheet
 Dim r As Range
 Dim rr As Range

 With Worksheets("data")
      Set rr = .Range("A1")
      For Each ws In Worksheets
          If ws.Name <> .Name Then
             Set r = ws.Range("A1").CurrentRegion
             rr.Resize(r.Rows.Count, r.Columns.Count).Value = r.Value
             Set rr = rr.Offset(r.Rows.Count)
          End If
      Next
 End With
End Sub



435 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:28:12 ]
>>427
祈われるまでもなく幸ねぇよw

>>400
もうちょい詳しく書かないと失礼だぞぅ

436 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:30:46 ]
range変数で格納できる範囲はRange(Cells(1, 1), Cells(5, 4))
のような一枚のワークシート上の範囲だけでなのでしょうか?
1枚目のRange(Cells(1, 1), Cells(5, 4))と2枚目のなんたらのように
別のsheetにわたった範囲の格納などしたい場合はどうすればいいのでしょう

437 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:57:59 ]
>>436
それは無理。 クラスの概念を知らないと分からないかもしれないけど。

別々の変数に持たせるしかないと思う。もちろん、配列やコレクションは使えるはず。


438 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:46:37 ]
Excelの分析ツールを使ってランダムにサンプルを取り出して計算するシート作ったのですが
Application.ScreenUpdating = False
て書いてもサンプル取り出すたびに再計算画面が出てしまいます
画面更新しないようにするにはどうしたらいいですか?

Sub MonteSample()
Dim myMonte As Integer
Dim i As Integer
Dim myMsg As String, myTitle As String
Dim myFun As Range
Dim myAv As Long, myStd As Long, myMax As Long, myMin As Long
Dim n As Long
Dim mysouce As Range
Dim mydat As Range
Dim mydats As Range
myMsg = "計算回数を入力してください"
myTitle = "モンテカルロ・シュミレーション"
myMonte = Application.InputBox(prompt:=myMsg, Title:=myTitle, Default:=30, Type:=1)
If Range("A12") = "" Then
MsgBox "A12のセルから損益のデータを入力してください", vbOKOnly + vbExclamation
End
End If

Range("D12:D1011").Select
Selection.ClearContents
Range("K32:K100").Select
Selection.ClearContents
Range("i32:i33000").Select
Selection.ClearContents

Application.ScreenUpdating = False

439 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:48:04 ]
For i = 1 To myMonte
Range("A12").Activate
Set mydat = ActiveCell.CurrentRegion
Set mydats = mydat.Offset(1, 0).Resize(mydat.Rows.Count - 1, _
mydat.Columns.Count)
Application.Run "ATPVBAEN.XLA!Sample", mydats, _
ActiveSheet.Range("D12:D1011"), "R", 1000, False
Range("I65536").End(xlUp).Offset(1).Select
ActiveCell.Value = Range("E1011")
Range("D12:D1011").Select
Selection.ClearContents
Next i
Range("N4").Value = myMonte
Range("I31").Activate
Set myFun = ActiveCell.CurrentRegion
myFun.Offset(1, 0).Resize(myFun.Rows.Count - 1, _
myFun.Columns.Count).Select
myAv = Application.WorksheetFunction.Average(myFun)
Range("N5").Value = myAv
myStd = Application.WorksheetFunction.StDev(myFun)
Range("N6").Value = myStd
myMin = Application.WorksheetFunction.Min(myFun)
Range("N7").Value = myMin
myMax = Application.WorksheetFunction.Max(myFun)
Range("N8").Value = myMax
Range("K32").Value = myMin
Range("K33").Select



440 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:49:08 ]
For i = 1 To 49
n = ActiveCell.Offset(-1).Value
ActiveCell.Formula = Int((Abs(myMin) + myMax) / 49) + n
ActiveCell.Offset(1).Select
Next i
Range("L32:L81").Select
Selection.FormulaArray = Application.WorksheetFunction.Frequency(myFun, Range("K32:K81"))

Set mysouce = Range("L32:L81")

ActiveSheet.ChartObjects(1).Activate
ActiveChart.SetSourceData Source:=mysouce, PlotBy:=xlColumns

Application.ScreenUpdating = True

End Sub


441 名前:デフォルトの名無しさん [2008/01/20(日) 21:03:23 ]

Application.ScreenUpdating = False
Application.ScreenUpdating = True


Application.EnableCalculation = False
Application.EnableCalculation = True


442 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 21:22:32 ]
>>441
再計算しない場合はそんなのあるのか、ありがとう。
でも、変えてみたけど実行時エラーでてだめだった、
ワークシートで再計算してるから使えないのか
ワークシートの再計算はそのままで画面の更新だけ止めるのはできないのかな


443 名前:441 [2008/01/20(日) 22:05:30 ]
折れには、試す気もないのでわからない。
続けての回答を待っているといけないから、折れには以後書くことはないと伝えておくよ。

あと、折れが使うのは
Application.EnableEvents = False (と True)
Application.Visible = False (と True)


444 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:17:22 ]
>>443
いろいろありがと
新しいこと少し覚えられてよかったw
まあ、うまくいかなかったけど趣味で使ってるだけだから
そのうちできるようになると思うのでゆっくりやります

445 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:58:30 ]
>>442
全くためしてないんだが

Application.ScreenUpdating = 画面の更新をするか
Application.EnableCalculation = 再計算してるか

を考えれば幸せになるんじゃね?

俺的には全部コードでやっちゃうがw

446 名前:441 [2008/01/21(月) 01:01:55 ]
>>442での「実行時エラー」ってのが、気になった・・・
application.run関係ぐらいしか実行時エラーが出うる箇所はないように見えた。

もしかしたらだけど、ここが参考になるかも
 ttp://www.geocities.jp/happy_ngi/YNxv9cz56.html

おやすみ


447 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:59:57 ]
>>445
>>446
ありがとうございます。
441さんの指摘のようにapplication.runが原因みたいです
Excelの分析ツール使うと画面更新されてしまうみたいです
ワークシート上だけで乱数関数使って同じようなコードで実行したら、
画面は更新されないでうまくいきました。
鋭い指摘ありがとう!


448 名前:デフォルトの名無しさん [2008/01/21(月) 15:40:17 ]
例えば、C3からK11まで範囲指定するのに、
rangeを使わず、offsetを使って指定することは可能でしょうか。

やりたいことをイメージ化すると以下のようなのですが・・・

Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2).Select, ActiveCell.Offset(10, 10).Select).Select
End Sub

449 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 15:58:59 ]
あのさ、
いちいちこのスレで聞くよりもさ、
自分でググるなり本を買うなりして調べた方が圧倒的に早いと思うんだけど。



450 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:09:36 ]
range("A1").select
range(selection.offset(2, 2), selection.offset(10, 10)).select
--
dim r as range
set r = range("A1")
debug.print range(r.offset(2, 2), r.offset(10, 10)).address
range(r.offset(2, 2), r.offset(10, 10)).value = 12345


451 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:10:15 ]
>>448
つか、目的がよくわかんねーよ。 あと、その例文、.Offset に .Select付いてたらエラーになるぞ。

そもそも、Offset って、基本的にRangeのプロパティなんだが。Rangeを使わずにどうしろと?


452 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:57:48 ]
If 気に入らない or わからない Then
  スルーしろ
End If

453 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:01:03 ]
意味が分かれば協力する気持ちがあるから訊いてるんだよ。全否定すんな。
それとも、どこが分からないか、こちらが分かりやすく優しく丁寧に質問しないとダメなのかよ?


454 名前:448 mailto:sage [2008/01/21(月) 17:19:29 ]
すまん!

Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2), ActiveCell.Offset(10, 10)).Select
End Sub

selectとったらいけました。
逝ってくる

455 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:56:47 ]
>>453
やりたいことの「イメージ」って書いてるだろ。
これで意図がわからんというのがわからん。

456 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:42:56 ]
>>453はかわいそうな子


457 名前:451 mailto:sage [2008/01/21(月) 21:10:50 ]
>>455
レスの流れぐらい見ろよ。レスから読み取れる範囲で回答はしてる。
それとも、IDがないと同一人物かどうかも判断できんか?


458 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:47:53 ]
構造体の2次元配列の参照って
Kouzoutai(1,2).Member = 1

という形であってます?
オブジェクトが必要ですとかいうエラーが返ってくるんですが…

459 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:59:26 ]
すごいな。
もう思いついたことをとりあえず質問するスレになってるな。
>>458なんてはなっから自分で調べる気ないもんな。



460 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:46 ]
>>458
オブジェクトがないんだよ。
Dim Kouzoutai( 5, 5 ) as HOGE
って形になってるか?

どうせ
Type Kouzoutai
Member as integer
End Type
とかになってんだろ。

「VBA 構造体」でググればびっくりするくらいヒットするじゃないか。

461 名前:デフォルトの名無しさん [2008/01/22(火) 07:24:11 ]
OSはWindows XP Home Edition、
Excelは2003の11.8169.8172です。
VBA初心者でここも初めてです。質問させてください。
2種類のグラフをそれぞれ別のシート上のオブジェクトとして作成しました。
(2つ同時ではなく、まず1つ目のグラフを作り、その後別のグラフを作るというやり方です。)
2つ目のグラフを作る際、1つ目のグラフの数値軸で自動的に表示された軸の最大値と最小値を
2つ目のグラフにも反映させたい(同一の値にしたい)のですが、
どのように記述すれば1つ目のグラフの最大値や最小値を呼び出すことができますか?
With ActiveChart.Axes(xlValue)
.MinimumScale = ココと
.MaximumScale = ココです。
End With

ぜひヒントがほしいです、よろしくお願いします。

462 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 12:59:28 ]
>>461
確認する時間がないのでヒントのみ。 あとはヘルプ見ながら直して。
 Dim s As Worksheet
 Dim c As ChartObject
 Set s = Worksheets.Item("test")   ←"test" って名前のシートが取得できる
 Set c = s.ChartObjects(1)       ←取得したシートの、1つめの図を取得
あとは c.Chart.Axes.Item(xlValue).MinimumScale な感じで対応する値が取得できると思われ。
まとめて書くこともできるが、とりあえず入力補助に反応する書き方にしといた。


463 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:25:13 ]
E6からE26とN6からN26に数字を入力したのですが、このコードよりも簡単な方法はないでしょうか?


Dim c As Long
Dim f As String
Dim v1() As Variant
Dim v2() As Variant
With Excel.Range("E6:E26,N6:N26")
c = .Areas.Item(1).Count
f = "ROW(" & .Worksheet.Range("A1") _
.Resize(c).Address & ")"
v1 = .Application.Evaluate(f)
v1 = .Application.Small(.Cells, v1)
f = "ROW(" & .Worksheet.Range("A" & 1 + c) _
.Resize(.Areas.Item(2).Count).Address & ")"
v2 = .Application.Evaluate(f)
v2 = .Application.Small(.Cells, v2)
.ClearContents
.Areas.Item(1).Value = v1
.Areas.Item(2).Value = v2
End With


464 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:31:48 ]
>>463
日本語でやりたいことを書け

465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:38:05 ]
>>463 観光客の人数をExcelで作成したのですが、E6からE26とN6からN26
に観光客の人数を入力したのですが、これを小さい順に書き換えるにはどうし
たらいいのですか?


466 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:46:13 ]
つ【並べ替え(S)】


467 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 18:25:19 ]
「セルが特定の値以外のとき、自分の行を削除」したい。
IFでセル内容を指定してから
Range.deleteでどうやって削除条件にすべきでしょうか。

468 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:22:56 ]
な、何なんだこのスレは・・・

469 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:05:12 ]
このスレは池沼のフリして教えたがりのうざいヲタを釣るスレですが、なにか?



470 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:13:25 ]
ってことはこれは釣れたってことでFA?

471 名前:デフォルトの名無しさん [2008/01/22(火) 22:49:21 ]
>>470
お前がなw

472 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:03:33 ]
やたー☆

473 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 11:53:11 ]
やったー +1

474 名前:デフォルトの名無しさん [2008/01/23(水) 18:41:55 ]
ここで良いかどうか分かりませんが・・・

ビデオカードの現在の解像度(できればモニタのインチ数も)によって、
ActiveWindow.Zoomの値を変更するプログラムを考えているのですが、
vbaでビデオカードの現在の解像度を調べるのは不可能でしょうか?

475 名前:デフォルトの名無しさん [2008/01/23(水) 21:16:04 ]
>>474

vba api 解像度 でぐぐれば、2番目にあなたの望む回答が

476 名前:デフォルトの名無しさん [2008/01/24(木) 08:57:54 ]
良回答認定

477 名前:デフォルトの名無しさん [2008/01/24(木) 09:11:24 ]
>>475
ありがとうございます!

下調べはしてたつもりだったのですが、
甘かったです・・・orz

478 名前:デフォルトの名無しさん [2008/01/24(木) 10:01:12 ]
恥ずかしながら全く分かりません。
何卒お願い申し上げます。


次の選択肢より正しい記述をすべて選びなさい。

1:java.io.FileReaderはテキストファイルから文字を行単位で読み込むクラスである。
2:new File("bbs.txt")と記述すると、新しいファイルが作成される。
3:ファイルの操作を行う前には、Fileクラスのopenメソッドを必ず使用する。
4:BufferedReaderクラスのreadLineメソッドは、ファイルの終端までを読み込む。
5:FileクラスのisFileメソッドの戻り値がfalseだった場合は、そのファイルが無いか、またはその名がディレクトリである事を示している。


479 名前:デフォルトの名無しさん [2008/01/24(木) 10:06:39 ]
>>478です。
申し訳ありません、スレ違いでした。
失礼致しました。



480 名前:デフォルトの名無しさん [2008/01/24(木) 10:33:36 ]
アクセスのVBAのスレが見付からないのでここで質問します。
アクセスのVBAで、フォーム1
ユーザ登録画面
ユーザ名[ ]
パスワード[ ]
登録
があり、2つを入力し、登録を押したら登録できるのを教えてください

481 名前:デフォルトの名無しさん [2008/01/24(木) 10:37:07 ]
>>478です。
何度もすみません。もうこのスレに書いてしまったので、
ほかのスレに書いたら、マルチポストとか云うのに
なってしまいますので、もしよろしければこのスレで
教えて頂けないでしょうか?

482 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:04:47 ]
>>481
誤爆はマルチにはならないと思うよ。
マルチポストだって言うヤツは居るかもしれんが、普通に教えて貰えると思う。
俺も多少は分かるけど、このスレで回答したくない。回答が違ってても突っ込みがなさそうだから。


483 名前:デフォルトの名無しさん [2008/01/24(木) 11:06:44 ]
>>482さん。
ありがとうございます。
助かりました。

484 名前:デフォルトの名無しさん [2008/01/24(木) 12:07:30 ]
AutoFilterが設定されたシートで選択されたセルの行数を知るには、下記の方法で
出来る事が分かったのですが、もっと簡単な方法がありますでしょうか?

Dim r As Range, rcnt As Long
rcnt = 0
For Each r in ActiveWindow.Selection.Rows
If Not r.Hidden Then
rcnt = rcnt + 1
End If
Next


485 名前:デフォルトの名無しさん [2008/01/24(木) 17:23:24 ]
すいません、VBA超初心者です。
"地域A"というシートから魚名前を検索して個数(魚の名前の2つ下のセル)と総量(個数のセルの1つ右)の数値を
台帳(以下の記述ではシート名”漁獲量”)シートの各魚の行に転記させたいのですが、
一生懸命ヘルプやネット検索しながら自己流で記述しましたが
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
と出ます。
どなたか正しい記述をアドバイスしていただけませんでしょうか?

486 名前:485 [2008/01/24(木) 17:24:49 ]
Private Sub CommandButton1_Click()

Dim fish As String
Dim i As Integer
Dim wrkA As Integer
Dim wrkC As Range
Dim wrkB As Range

With Sheets("地域A")
wrkA = .Cells(1, Columns.Count).End(xlToLeft).Column
wrkC = .Range("A1").Resize(1, wrkA)
wrkB = .Range("A3").Resize(1, wrkA)

End With
Dim wrkD As Integer
With Sheets("漁獲量")
wrkD = .Cells(Rows.Count, 1).End(xltoUP).Row
wrkE = .UsedRange
fish = .Range(wrkD, 1).Value
End With


487 名前:485 [2008/01/24(木) 17:25:54 ]
つづきです

For i = 1 To wrkA

If fish = wrkC("wrkA,i") Then
fish = wrkB(1, i)
Cells(wrkD, 1).Offset(0, 1) = wrkB(1, i + 1)

Else
fish = " "
Cells(wrkD, 1).Offset(0, 1) = " "

Exit For
End If
Next i

End Sub

488 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 17:55:01 ]
>>485
ちょっと突っ込みどころが多すぎるので、全部回答はできないんだけど、
まだ基本を分かりきってないみたい。
とりあえず、 With Sheets("地域A")   With Sheets("漁獲量")  のトコを
Dim ws As Worksheet    ←もちろん最初(1箇所)だけ
Set ws = ThisWorkbook.Worksheets("地域A")
With ws
のような形に修正すれば、"."キーを押したときに入力補助が反応するから、
それを参考に修正するといいと思う。この入力補助が反応するようなコードってのは結構重要。
("."を押してもメソッドが出なければ、記述したところでほとんど実行時エラーになる)

あとは、.End(xltoUP) の定数は xlUp がいいのと、
fish = .Range(wrkD, 1).Value の行みたいに、Cells と Rangeの使い分けが混乱してるかな。


489 名前:485 [2008/01/24(木) 18:00:49 ]
>>488
どうもありがとうございます!!
突っ込みどころ満載ですか…笑
ご指摘を元に再度勉強してがんばってみます!!



490 名前:488 mailto:sage [2008/01/24(木) 18:30:38 ]
>>489
ゴメン、もっと重要なポイントがあった。
wrkC = .Range("A1").Resize(1, wrkA) は、オブジェクト型変数への代入になるので、
Set wrkC = .Range("A1").Resize(1, wrkA) という書式を必ずとること、です。


491 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:36:51 ]
漁獲量・・・

492 名前:デフォルトの名無しさん mailto:age [2008/01/25(金) 23:56:11 ]
すみません。vlookupのワークシート関数がうまく動きません。
普通のvlookupのようにvlookup(値、範囲、2、False)としましたが
エラーが出てしまいます。範囲がおかしそうですが
どう書き方が誤っているのかがよく判りません。
どなたか、御指摘願えませんでしょうか?

With Worksheets(2)
'Xは適当な自然数です。
For i = 1 To 100
Cells(i + 1, 2) = Application.VLookup(Cells(1, 1).Offset(i, 0).Value, .Range(Cells(2, 3), Cells(X, 4)).Address, 2, False)
Next i

493 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:11:11 ]
すみません。色々試行錯誤していたら解決しました。有難うございました

494 名前:デフォルトの名無しさん [2008/01/26(土) 17:35:21 ]
かなり高度な質問です。
Me.Controls.Add("Forms.textbox.1","品名",True)
のFormsって一体何なのですか?

495 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:48:24 ]
余りに低レベルなので泣けてきました。

496 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:52:19 ]
OLEコントロールの名称でないの。
Microsoft Forms 2.0 TextboxのPROGID

497 名前:デフォルトの名無しさん [2008/01/27(日) 13:51:07 ]
VBAの中でソルバ関数を実行しようとしてます。
その目的セルの評価値を計算する際に、さらにソルバを実行したいです。
(つまりソルバの2重ループになる感じ)

が、これを実現できなくて困っています。
考えてたのは、内側のループのソルバ部分を関数にして
ワークシートから呼び出せるようにして、
それを外側ループのソルバの目的セルの数式に放り込んでやればいい、
という方法なんですけど、
VBAのFunctionの中でソルバをまわそうとすると
シート上の値を書き換えなければならないのでエラーになってしまいます。
かといってそれをサブプロシージャにしても
ワークシート上の数式として表せないので、
結局外側のループで使えません。

何とかこれを達成する妙案はないですかね…
達成したとしても重くて不安定にはなると思うんですが、
それは承知の上です。

環境はWinXP SP2+Excel2000です


498 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:57:52 ]
↑根本的に何かを勘違いしてないか?

499 名前:デフォルトの名無しさん [2008/01/27(日) 14:03:45 ]
勘違い・・・っすか
どのへんがおかしいんでしょう?
それすらわからんです



500 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:11:32 ]
ソルバ?
ttp://www.joy.hi-ho.ne.jp/ngchsny/xevious_sol.jpg

501 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:00:39 ]
Excel2003です。
OnErrorでエラーメッセージの出力を指定しても、

エラーだとそのエラーで無事処理は終わるのですが、
本来エラーにならない場合でも、エラーメッセージ出力→正常処理 となるんですけど。

何か原因は考えられますか?
(プログラム持ち出せないのでここに書けないのです)


502 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:16:08 ]
デバッグトレースシテクダサーイ

503 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:09:18 ]
>>501
On Error で飛ぶタグの前に Exit Function を書いてなかった、とか言ったら頃すぞ?


504 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:49:26 ]
Exit Function を書いてなかった位で殺されるんじゃタマッタもんじゃない。

505 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:15:06 ]
マジレスのハズもないのに、
ネタや回答の一つも返さず、つまらんマジツッコミを入れるとは一体どういう了見か?


506 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:16:04 ]
>>504
金払って許してもらおうぜ

507 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:02:19 ]
うんこ出た
超きもちいい


508 名前:501 mailto:sage [2008/01/28(月) 12:59:32 ]
マクロの最初に

On Error Msgbox
On Error exit Sub

で、以下正常時の処理を記述しているのだが。
Exit Function書くとエラーが出る。

509 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:09:09 ]
>>508
そもそもそれコンパイル通るの?
↓なら問題ないと思うけど。

Privete Sub 処理()
 On Error GoTo ラベル
 (通常処理)
 Exit Sub

 ラベル:
 (エラー処理)
End Sub




510 名前:デフォルトの名無しさん [2008/01/28(月) 16:54:46 ]
Sub abc
Dim rng As Range
Set rng = Selection
test rng
End Sub

Function test(r As Range)
Dim c As Range
For Each c Iin r
  'cの処理
Next
End Sub

と選択範囲を引数にしてtestを呼び出しますが、testの引数rはByValにした方がいいんでしょうか?
きちんと動くには動くのですが、ちょっと不安になったもので教えてください。

511 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:48:36 ]
>>510
その程度のものを分ける必要があるか知らんが、ByValは無意味。
そこはそのまんま参照渡しが正解。
それよりFunctionは気持ち悪くないかい?
Private Sub test(r As Range)
とするのが普通だろ?
Functionって戻り値を得るものに限定した方がいいと思うが。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<253KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef