5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

VBAについて Ver.4.0

1 :デフォルトの名無しさん:05/01/07 23:30:29
前スレ
http://pc5.2ch.net/test/read.cgi/tech/1078187762/

2 :デフォルトの名無しさん:05/01/07 23:57:31
22

3 :デフォルトの名無しさん:05/01/08 00:19:56
3げっと。

4 :デフォルトの名無しさん:05/01/08 00:29:45
このスレをたてたのは私。そして私は4様。誰もこないな。。。

5 :デフォルトの名無しさん:05/01/10 16:22:47
スレ立てお疲れ様です。

Excel2002で早速質問なのですが、
今Sheet1がアクティブになっている状態で、Worksheets("Sheet2").Range("A1").Select
のコードを実行しようとしたのですが、「RangeクラスのSelectメソッドが失敗しました」
とエラーが出ます。

Sheet2は存在する状態にも関わらず、なぜSelectできないのでしょうか。
ご回答いただければ幸いです。

6 :いけめん太郎:05/01/10 16:34:47
>>5 Sheet2をアクティブにしてからA1を選択してはいかがですか?

僕も質問させていただきますと、
Excel2000にて、セル範囲の各値を、
10項目(セル)ずつ、スペースを一つずつ空けてテキスト形式にて
保存する方法を探しています。
1 1 1 1 1 1 1 1 1 1 **項目
2 2 2 2 2 2 2 2 2 2 ** (値)
のように、右端に項目名を書き込みし、
その下の段の右端にその項目の値を書き込みたいと思っています。
セルの値のところ 1 1 1 1 の辺りは、一行の値を書き込み、
右端に一項目ずつ、見やすく記入したいと思っています。
Cells() で指定し、Print()にてファイルに書き込むと、
大きなタブが入ってしまいます。
セル範囲の参照は、ベタ打ちでもOKです。
ご意見よろしくお願い致します。

7 :デフォルトの名無しさん:05/01/10 20:31:55
Public Sub 変数を使った計算例()
X = 10
X = X + 20
Range("A1").Value = X
End Sub
基本的なことが・・・・反映することができません〜


8 :デフォルトの名無しさん:05/01/10 21:25:23
>>6
Print → Write でどう?

>>7
質問の意味がよくわからないけど、単に呼び出してないだけとか。

9 :デフォルトの名無しさん:05/01/10 21:55:11
>>5
ActiveなシートしかSelectできないです。
ちなみにValue取得はActiveでなくてもできます。


10 :デフォルトの名無しさん:05/01/10 21:58:44
>>7
うちでは問題なくできました。(Excel2000)


11 :デフォルトの名無しさん:05/01/10 22:11:08
>>6
>>9

SelectするにはActiveにしないといけないのですね。
とても参考になりました。ありがとうございます。

12 :デフォルトの名無しさん:05/01/10 22:19:50
7ですができました。実行していませんでした。

13 :デフォルトの名無しさん:05/01/10 23:14:19
>>6
少し、違うかもしれないが、
1 セルの幅を数値に合わせる。
2 テキスト(スペース区切り)*.prnで保存

14 :marukome:05/01/11 12:17:33
こちらで質問してよくなければどこかへ誘導して頂けたらうれしいです。

<アップロードの処理>
エクセルVBAで、あるサイトをIEで開く処理まではやっとできたのですが、
そのサイトの(テキストボックス?)にローカルのパスとファイル名を
入れて、ボタンを押すという作業をさせたいと思います。

ソースを見てみたのですが、どうもPHP3とか書いてあるのですが、
よく分かりません。
何かヒントなりあればよろしくお願いします。

15 :marukome:05/01/11 13:58:24
sendkeys を使っても、そのサイトが更新されたらすぐに使えなくなって
困ってます。不安定なので、できればなんとかならないかと

16 :デフォルトの名無しさん:05/01/11 17:33:00
End Subの後に
Option Base 1をいれたらエラーがでるのです。
エラーをださない方法ありますか?


17 :デフォルトの名無しさん:05/01/11 19:32:33
>>16
Option Base 1ステートメントはモジュールの先頭でしか宣言できなかったと思う。
なので、End Subの後に入れるのは不可能っぽいです。

18 :デフォルトの名無しさん:05/01/11 19:43:11
>>17
ご返答ありがとうございます。
Option Base 1を先頭にしてみます。

19 :デフォルトの名無しさん:05/01/11 21:03:40
>>14
with ie.Document.Forms(0)
.Item("テキストボックスのName").Value = 値
.Submit
end with

細かいところは、目的のフォームに合わせて変えてくれ。

20 :marukome:05/01/11 22:10:19
>>19
ありがとうございます!
早速試してみます。
また、よろしくお願いします!

21 :デフォルトの名無しさん:05/01/11 23:06:20
OutLookの予定表画面で
[ファイル]→[インポートとエクスポート]→[ファイルへエクスポート]→[MicrosoftExcel]
としてエクスポートしたExcelファイルを開くと、
"内容"の列に改行文字(?)として"・"が表示されることがあります。
これを削除したくて、次のようなソースを書きましたが、
依然として"'・"と表示される、文字のようなもの(選択できません)が残ります。
どうやったらExcel上で消えるんでしょうか?

Sub ToNoLf()
'改行コード削除
Cells.Replace What:="" & Chr(10) & "", Replacement:="", _
LookAt:=xlPart, SearchOrder:= xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
End Sub


22 :21:05/01/11 23:09:09
言葉足らずでした。
上に書いたマクロを実行すると、"・"が減るんですが、"・"が
2つあるセルは1つだけになるということです。
文字コードに弱いのでどなたかお願いします。

23 :デフォルトの名無しさん:05/01/11 23:57:53
>>21
OutLook持ってないから確かめられないけど、
改行コードがCR+LFなんじゃないかな?

そうだったらCRも同じ方法で除去すればOK
文字コードはChr(13)
まとめて、vbCrLfでもいけそうだけど、環境依存になるかも。

あと、空白セルは見ても仕方ないので、CellsよりUsedCellsとか
の方がよさげ。

24 :デフォルトの名無しさん:05/01/12 12:44:15
サブフォームに表形式フォームを組み込んでいるのですがスクロールさせると
最後のレコードの後に灰色の隙間が3レコード分くらい空いてしまう
(表形式フォームをサブフォームに組み込むとデフォルトでこうなると思います)
のですがこれを消すことは出来ないでしょうか?
分かりにくいかとは思いますがご教授お願い致します。


25 :デフォルトの名無しさん:05/01/12 17:13:12
>>24
全然VBAじゃない気がする。

アクセスと見て、こちらに誘導↓
http://pc5.2ch.net/test/read.cgi/bsoft/1089812359/l50

26 :marukome:05/01/12 19:50:47
>>19さん。
せっかくヒント与えていただいたのに、
すみません、できませんでした。
↓がExcel側のコードです。実際細かいところでつまづいていると思います。
よろしくご教授お願いします。
-----------------------------------------

Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True

objIE.Navigate "https://***/*****.php3?action=4"

Do While objIE.Busy = True
DoEvents
loop

-----------------------------------------


27 :21:05/01/12 19:50:58
>>23
できました!ありがとうございます。

> あと、空白セルは見ても仕方ないので、CellsよりUsedCellsとか
の方がよさげ。

仮ソースなので自動記録のマクロをいじっただけなんです。。。


28 :marukome:05/01/12 19:51:36
 
下記がソースです(一部伏字)
----------------------------------------
<form action="*****.php3" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="1">
<tr>
<td>
<input type="file" name="***file" value="" size="20">
<a href="Javascript:openSubWindow('/guide/?m=n&s=18')"><img src="****.gif" width="16" height="14" border="0" align="absmiddle" alt="○○な○○"></a>
</td>
</tr>
<tr>
<td align="center"><input type="submit" value=" アップロード "></td>
</tr>
</form>
----------------------------------------

29 :デフォルトの名無しさん:05/01/12 20:42:22
Sub 配列の要素数を変更()
Dim Wakusei() As String
ReDim Wakuswi(1)
Wakusei(0) = "水星": Wakusei(1) = "金星"
ReDim Preserve Wakusei(3)
Wakusei(2) = "地球": Wakusei(3) = "火星"
End Sub
これを実行するとエラー9インデックス有効範囲ではありません
となるのですが、どうすれば解除することができるのでしょうか?

30 :デフォルトの名無しさん:05/01/12 20:54:12
>>29
ネタにマジレスかもしれんが、
Wakuswi(1)→Wakusei(1)

マジボケだったら、option Explicit をおすすめする。

31 :デフォルトの名無しさん:05/01/12 21:04:03
>>30
ご返答ありがとうございます。
間違い訂正してもエラーが出ます
option Explicit をつければなおるのですか?
先頭につけるものなのかな〜



32 :デフォルトの名無しさん:05/01/12 23:51:30
>>29
うちの環境では問題出ませんでした。(Excel2002)
>>30の変数の訂正をした後ね。
これでエラーが出るならちょっと分からないかも。。

33 :デフォルトの名無しさん:05/01/13 00:32:04
同じ2002なのに、エクセルの方に何か書けばいいのかな〜

34 :デフォルトの名無しさん:05/01/13 01:02:47
>>33
option base 1ステートメントは宣言してないでしょうか。
もししていたなら、Wakusei(0) = "水星"でエラーになります(要素数0は存在しないため)。

考えられる原因としたらこのぐらいかな。。
他にはモジュールにsubプロシージャなどは記述していませんか?

35 :デフォルトの名無しさん:05/01/13 11:09:07

質問です。
下記スレより誘導されました。
●EXCEL・VBAの勉強法教えてスレ●
http://pc5.2ch.net/test/read.cgi/tech/1054356121/l50

ExcelVBAにて、
列数に応じて列幅を変えたいのですが、
列幅をPixcel指定することは出来ないのでしょうか?


36 :デフォルトの名無しさん:05/01/13 17:41:23
>>34
ご返答ありがとうございます。
option base 1の所に書いてありました。
他のモジュールの方でためしたら、エラーはでなかったです。
でも何もエクセルの方に反映されませんでした。
こういうのがいくつかあるのです・・・こういうものなのでしょうか?




37 :デフォルトの名無しさん:05/01/13 21:01:20
>>36
どういたしまして。解決できて良かったです。

>でも何もエクセルの方に反映されませんでした。
これはsubプロシージャの変数がセルに反映されていないという意味でしょうか?

>>29のプロシージャだけだと、実行してもセルなどには何も反映されません。
もしセルに変数の値を反映させたいのならば、cells(1,1)=Wakusei(0)などとします。
上記はA1セル(cells(1,1)またはRange("A1"))にWakusei(0)の値を代入せよという意味です。

38 :デフォルトの名無しさん:05/01/13 22:25:07
>>37
やっぱりセルに書かないと反映されないのですね

色々モジュールに書いているのですが必要なのかどうかわからなくなっています
まだ本の最初の方だからそういうふうに思うのかな〜
後半になればVBAのすごさがわかるようになるのかな〜

39 :デフォルトの名無しさん:05/01/13 22:43:18
セルに反映したいのにセルに書く(代入する)のが面倒ってことかな。
何か意味が分からない。
処理中は2次元配列変数に代入しておいて最後に一括してセルに
反映することもできます。



40 :デフォルトの名無しさん:05/01/13 23:28:39
VBAで書かなくてもセルに書いた方が早いと思っているのです。
まだVBAすごさがわかっていません。
今の時点ですごいのだけど、それに気づいていないのかな〜
反映すると面白いと思う、でも必要性を考えると ?
これからなのかな?

41 :デフォルトの名無しさん:05/01/13 23:37:53
>>35
ここ読んでみてください。
ttp://www.keep-on.com/excelyou/2001lng4/200106/01060093.txt

42 :デフォルトの名無しさん:05/01/14 00:15:23
>>40
セルに書いた方が早いなら無理にVBAでコードを書かなくても良いような気がします。
結局は「適材適所」、これに尽きるかと。
自分は業務で同じ作業を手で何度もやるのが面倒&間違う恐れもあるためVBAを使うことが多くなりました。

ヘルプも多少分かりづらい部分があるとはいえ、有用ですよ。
あとは、マクロ記録をしてどういうコードが記述されるか見ていくうちに、徐々に分かってくるようになっていくかも。

43 :デフォルトの名無しさん :05/01/14 00:37:58
>>42
ご返答ありがとうございます。
もうちょっとがんばってみます。
VBAでゲームが作れるみたいですね
まだまだ先かな〜

44 :デフォルトの名無しさん:05/01/14 02:26:45
エクセルからmdbファイルに接続してレコードを取得する時

Sheets(1).Range("A1").CopyFromRecordset r

こんな感じでレコードを取得できるんですが
セルに表示させる前にレコードの各要素を配列変数で受け取りたいと思って

Dim X(0 to 9) As Strange
中略
X.CopyFromRecordset r

といった感じで、配列に渡そうとしても出来ません
配列変数などに入れる方法ってあるんでしょうか?


45 :デフォルトの名無しさん:05/01/15 01:55:07
>>26
こんな感じでどうでしょう
Sub test()
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "file://c:\test.htm"
Do While objIE.Busy = True
DoEvents
Loop
SendKeys "{TAB 3}", True '環境に合わせて数字を変更してください
SendKeys "c:\test", True '参照に表示させたい文字列
Set x = objIE.document.all.tags("input")
For Each y In x
If y.Value Like "*アップロード*" Then
y.Click
End If
Next
End Sub


46 :デフォルトの名無しさん:05/01/16 17:13:19
質問させてください。

プライベート関数の中からgoto構文を使ってパブリック関数へ飛ばす際、
パブリックで必要な処理が終わった後に再びプライベートの中のgotoの次の行の処理を
させることは出来るのでしょうか?

ちょっと分かりにくい説明かも知れませんが、例えば、

private sub プライ()

Goto 処理1
Goto 処理2

end sub

purlic sub パブ()

'処理1
label1.caption = "まいった
'処理2
label2.caption = "困った"

end sub

こんな感じの文で、処理1が終わった後に一旦プライベートの方に戻り、それから再び
処理2の方に進みたいのです。

すいませんがどなたか力を貸してください。

47 :デフォルトの名無しさん:05/01/16 17:49:35
>>46
Goto構文は流れが分かりにくくなって、バグを誘発するだけだから
できるだけ使わないほうがいいと思うが。
普通にこんな感じではだめ?

private sub プライ()
 Call 処理1
 Call 処理2
end sub

public sub 処理1
 label1.caption = "まいった
end sub

public sub '処理2
label2.caption = "困った"
end sub

48 :デフォルトの名無しさん:05/01/16 18:17:18
>>47
どうもありがとうございます!
Call構文自体今まで知らなかったです。
いやぁ無知は罪なもんですねw
今からCall構文について調べてみます。
ありがとうございました!

49 :デフォルトの名無しさん:05/01/16 19:36:28
条件付き書式によって変わっているセルの色を取得する方法
はないでしょうか?


.Interior.ColorIndexでは元の色しか返ってきません
お願いします

50 :デフォルトの名無しさん:05/01/16 19:56:03
>>49
ここ読んでみてください。
ttp://keep-on.com/excelyou/1999lng4/199908/99080044.txt

51 :デフォルトの名無しさん:05/01/16 20:02:26
>>46

>>47さんの処理1と処理2を1つの関数にまとめるなら、

Private Sub プライ()

Call パブ(1) '処理1
Call パブ(2) '処理2

End Sub

Public Sub パブ(Arg As Integer)

Select Case Arg
Case 1 '処理1
  label1.Caption = "まいった "
Case 2 '処理2
  label2.Caption = "困った"
End Select

End Sub

という感じで。

52 :49:05/01/16 20:56:38
>>50

初心者には難しいですがなんとかできそうです
ありがとうございました

53 :デフォルトの名無しさん:05/01/16 22:18:07
>>52
SpecialCells(xlCellTypeAllValidation)

を使えば少しは楽になるかな。
とにかく、Excelで色の取得するのは何かと大変。。。

確か隠し関数にちょうどいいのがあった気がするんだけど、
何だったっけ?

54 :デフォルトの名無しさん:05/01/16 22:51:13
エクセルで確率密度関数(Px)に対応した累積分布関数(Fx)の値を作成したい
のですが、乱数の値が1の場合、確率密度関数が0.05に対応した累積分布関数の値
の算術式はどのようになるのでしょうか?


55 :デフォルトの名無しさん:05/01/16 22:58:31
>>54
それはVBAじゃなくて、単にExcelの関数で十分なのでは。

56 :デフォルトの名無しさん:05/01/16 23:03:12
補足。
よくある分布関数なら、NORMDIST、BETADISTとかで。
積分可能な関数なら積分した式をぶち込めば終わり。

むちゃくちゃな分布なら・・・セルに計算させて足し算?

57 :デフォルトの名無しさん:05/01/17 15:19:36
>>53
Get.Cell

58 :デフォルトの名無しさん:05/01/18 23:27:25
Sub セル範囲を習得_エラー処理()
Dim prRange As Range
On Error GoTo errMSG
Set prRange = Application.InputBox(Prompt:="印刷範囲を選択してください"), _
Title:="印刷範囲指定", Type:=8)
With ActiveSheet
.PageSetup.PrintArea = prRange.Address
.PrintPreview
End With
Exit Sub
errMSG:
MsgBox "処理を終了します"
End Sub
エラー処理がエラーになる・・・
_ がいけないのでしょうか?

59 :デフォルトの名無しさん:05/01/18 23:46:37
うちではエラー出ませんね。
てか、括弧が多いのは直してますよね。

60 :デフォルトの名無しさん :05/01/19 00:03:11
あっ確かにカッコが多い。でも本にこう書いてる。
カッコはずしてためしてみます。ご返答ありがとうございます

61 :デフォルトの名無しさん:05/01/19 00:11:52
はずしたらできました。ありがとうございます

62 :デフォルトの名無しさん:05/01/19 16:57:12
イベントプロシージャに関する質問です。

特定の列のセルをダブルクリックしたときにだけ
マクロを実行するにはどのようなコードを書けばよいのでしょうか?

B列のどれかのセルをダブルクリック→イベントプロシージャ
それ以外のセルをダブルクリック→反応無し
としたいのです。

IfやActivecell.Rangeなどで試行錯誤したのですがうまくいきませんorz
教えて下さい。よろしくお願い致します。

63 :デフォルトの名無しさん:05/01/19 21:29:01
Worksheetイベント
BeforeDoublClick
Target.Column = 2

64 :デフォルトの名無しさん:05/01/20 00:49:23
質問させてください。

Access VBAでクラスモジュールを作成、クラスモジュール内で自身のクラス
名を取得したい場合、どのようにすればよいでしょうか。

クラスモジュール内でデバッグ用に、現在実行中のクラスが何処かをmsgbox
で表示させたい、というのが意図です。

宜しくお願いいたします。

65 :デフォルトの名無しさん:05/01/20 03:05:37
AutoFilterの質問なんですが。

本に、
With Range("出荷伝票テーブル")
.AutoFilter 2, "=スーパーマルジュウ", xlOr, "=フードランド"
.AutoFilter 8, ">=1999/8/1",xlAnd, "<1999/9/1"
End With
というVBAがあって、これを例えば
With Range("出荷伝票テーブル")
.AutoFilter 2, "=スーパーマルジュウ", xlOr, "=フードランド"
.AutoFilter 3, "=アイス",xlOr, "=苺"
End With
のようにして計4つのキーワードの抽出をしたいのですが、こうすると
全部消えてしまいます。AutoFilterを2つ使う場合、1つはキーワード
もう一つは期間でやらないとダメなんでしょうか?

66 :デフォルトの名無しさん:05/01/20 17:21:41
>>63
回答ありがとうございます。
大変参考になりました。感謝感激♪

67 :デフォルトの名無しさん:05/01/20 19:36:42
>>65
フィールドナンバーは合ってます?

68 :デフォルトの名無しさん:05/01/20 21:07:15
>>67
フィールドナンバーは合ってます。

69 :marukome:05/01/21 21:42:24
>>45
ありがとうございました。できました。
後段のfor eachの処理をこれからですが
勉強します。本当にありがとうございました!
遅くなりましてすみませんでした。

70 :デフォルトの名無しさん:05/01/22 22:54:58
X 1 2 3 4
P(x) 0.25 0.15 0.1 0.05
F(x) 0.7 0.85 0.95 1.0
Rnd関数により一様乱数を生成後、ある確率密度関数に従う乱数の生成は、
乱数―確率関数−累積分布関数のテーブルを用いて行う。上の表を参照
して
乱数(x)の値と累積分布関数の値F(x)を用いて乱数を作成するFunctionプロシージャ
を作成してください。
次に、生成した一様乱数の値yが
     F(xi) ≦ y < F(xi + 1)
 のときに、乱数Xは「xi + 1」とする。
 例えば、乱数Rndの値yが0.567の場合、
F(0.45) ≦ y(0.567) < F(0.7)
となり、乱数Xとして「5」を選択する。
Functionプロシージャの実行結果(乱数の発生結果)
はエクセルのA12以下から結果が出るようにしたいです。
長文すいません。よろしくお願いします。助けてください。

71 :、、、、:05/01/23 00:10:33
どうしてもわかりません
天才の方々どうか教えて下さい。
セルの中の文字列をコピーする
コードがわかりません。


Excel中のセルの中の文字列を
ボタン一つでコピーして
ロータスのノーツに貼り付けたいのです。

一つのセル全体をコピーするのは記録で
作れますが、セルの中の文字列をコピー
するという記録がうまくいきません。

どうかお助け下さい。


72 :デフォルトの名無しさん:05/01/23 00:55:43
>71
ビジネスソフト板のExcelスレで同様の質問があり、回答も付いてるので向こうを見てこい

73 :デフォルトの名無しさん:05/01/23 09:54:47
下のようなコードを実行すると"loopに対応するdoがありません"というエラーが出てしまいます。
こんなエラーは見たことがなかったのですが、どこがいけなかったのでしょうか?
どなたか教えてください。お願いします。

sub 照合()
Dim finale0 As Integer
finale0 = Workbooks(acw0).Worksheets("基本").Cells(Worksheets("基本").Rows.Count, 9).End(xlUp).Row
Dim finale1 As Integer
finale1 = Workbooks(acw1).Worksheets("基本").Cells(Worksheets("基本").Rows.Count, 9).End(xlUp).Row
Dim gyou0 As Integer
Dim gyou1 As Integer
gyou0 = 6
gyou1 = 4

Do Until gyou0 = finale0

If Workbooks(acw0).Worksheets("基本").Cells(gyou0, 9) = Workbooks(acw1).Worksheets("基本").Cells(gyou1, 2) Then
Workbooks(acw0).Worksheets("基本").Cells(gyou0, 15) = Workbooks(acw1).Worksheets("基本").Cells(gyou1, 7)
gyou0 = gyou0 + 1
gyou1 = 4
Else
gyou1 = gyou1 + 1
If Workbooks(acw1).Worksheets("基本").Cells(gyou1, 2) = "" Then
gyou0 = gyou0 + 1
gyou1 = 4
End If

looping:
Loop
end sub

74 :デフォルトの名無しさん:05/01/23 11:21:44
>>73
End If が足りないから。

75 :デフォルトの名無しさん:05/01/23 12:27:38
>>74
1あぁ・・・本当だ・・・これを見つけられずに一週間も悪戦苦闘してた俺って一体・・・orz
どうもありがとうございます。


76 :タク:05/01/24 10:37:52
OS:XP
Access Version:2003
すいません、えっと
前もって変数が決められたものに対してSETステートメントを実行するときにクエリーで抽出させる方法はありますでしょうか?

----------------------------------------------------------------
例:

クエリ名 Q施工内容
抽出したい変数名 TEL

Dim TEL AS String * 20

Set DB_01 = CurrentDb()
Set ST_01 = DB_01.OpenRecordset("Q施工内容",dbOpenSnapshot)
----------------------------------------------------------------

このときにクエリを開く際にTEL変数の抽出をしたいのです。
何か構文はありますか?
それとも他に良い方法がありますでしょうか?
よろしくお願いします。


77 :デフォルトの名無しさん:05/01/24 18:19:42
CompactDatabaseでaccess97からaccess2003に変換する場合の
dbVersionの値はいくらのでしょうか?
4.0(access2002)以上ってないのでしょうか?
誰かご存知の方は教えてください。

78 :デフォルトの名無しさん:05/01/25 00:45:05
>>76
何が聞きたいのかさっぱり分からないんだが、
誰か分かる?

79 :デフォルトの名無しさん:05/01/25 20:02:52
Excelで時間割を作っています

「セルA1に時間を入力すると、そこを参照してセルB1に色を付ける。」と言ったことがやりたいのですが

例えばセルA1の値が9:00〜9:15(時間)の間であれば、セルB1に赤色を着色する様にしたいのですが

どうすればできるでしょうか、どうかご教授下さい。

80 :デフォルトの名無しさん:05/01/25 21:30:00
>>79
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    If Left(Target.Text, 1) = 9 Then
        If Right(Target.Text, 2) <= 15 Then
        Range("B1").Interior.ColorIndex = 3
        End If
    End If
End If
End Sub

81 :デフォルトの名無しさん:05/01/26 00:16:47
>>79
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    Select Case Target.Value
    Case Is > TimeValue("9:15")
      Range("B1").Interior.ColorIndex = xlNone
    Case Is >= TimeValue("9:00")
      Range("B1").Interior.ColorIndex = 3
    Case Else
      Range("B1").Interior.ColorIndex = xlNone
    End Select
  End If
End Sub


82 :デフォルトの名無しさん:05/01/26 01:07:11
>>79
条件付書式では不足?

83 :79:05/01/26 08:18:25
おはようございます、レスありがとうございます。
教えて頂いた式で想い通りの動作が確認できました。

いつもとは違い私には込み入った物を作っていますので
助かりました、ありがとうございました。

84 :デフォルトの名無しさん:05/01/26 11:07:23
>>79 です

度々すいませんが、解らなくなったので再度質問させて下さい。

If Target.Address の部分にもう一つのセルの時刻を取得させて

(セルA1(9:00から9:15の間の値))かつ(セルA2(15:00から15:15の間の値))であれば

(セルB1に赤色を着色、セルB2に青色を着色、セルB3に青色を着色、以下任意に追加)と言うようにできるでしょうか?




セルA1(開始時刻) と セルA2(終了時刻) を取得して

15分区切りの升目(セル)を、B列に作って居るので、時間の目盛りに沿って塗りつぶしたい(多色)のですが

よろしければ教えて下さい。

85 :デフォルトの名無しさん:05/01/26 22:38:16
エクセルのワークシートって、横(カラム)は、256までしかないの?
縦(ROW)はいくつまであるの??

86 :デフォルトの名無しさん:05/01/26 23:04:56
65536

87 :デフォルトの名無しさん:05/01/26 23:49:08
さんくす>>86

やっぱ、横(カラム)は、256より増やせないんですね??


88 :デフォルトの名無しさん:05/01/28 00:09:37
>84
何がしたいのかさっぱり分からんぞ
前半のA1とA2がB1,B2,B3と、どうリンクしてるのかも謎だ
前半と後半では質問内容が違うみたいだ

まず81氏のSelect Caseステートメントか
IF,Then Elseステートメントを使えば何でもできるぞ

Private Sub Worksheet_Change(ByVal Target As Range)
With Target

If .Column = 1 Then
If .Value > TimeValue("9:15") Then
.Offset(0, 1).Interior.ColorIndex = xlNone
ElseIf .Value >= TimeValue("9:00") Then
.Offset(0, 1).Interior.ColorIndex = 3
Else
.Offset(0, 1).Interior.ColorIndex = xlNone
End If
End If
End With
End Sub

A列の時刻からB列の設定をする場合は
If .Column = 1 Then をトリガーにして、Offset(0, 1)で指定すればいいし

A1とA2をトリガーにしたい場合は
If .Address = "$A$1" Or .Address = "$A$2" Thenとか
If .Row < 3 and .Column = 1 Thenなんか
使えば良いんだ

分かるところまで自分でコード作って考えてみないと作れないぞ

89 :デフォルトの名無しさん:05/02/01 16:25:24
ユーザーフォームにテキストボックスが4個あるとして、
ある条件をみたした時に、
カーソルを好きなテキストボックスへ持っていきたのですが、
どうすれば良いでしょうか?

90 :デフォルトの名無しさん:05/02/01 16:26:02
×持っていきたのですが、
○持っていきたいのですが、

91 :デフォルトの名無しさん:05/02/01 21:38:26
If (条件) Then
TextBoxXXX.SetFocus
End If

92 :デフォルトの名無しさん:05/02/02 23:27:36
>90
氏ね

93 :デフォルトの名無しさん:05/02/02 23:57:58
>>89

まず間違いなく92=89だが、「氏ね」のセリフを吐くだけで正答を書いてくれている
91さんには何にもなしかよ。
これじゃ日本がおかしくなるわけだ。あぁ嫌だ嫌だ

94 :デフォルトの名無しさん:05/02/03 09:59:29
昨今の不況で日本人は心まで貧しくなってしまったのかねぇ。


95 :デフォルトの名無しさん:05/02/03 23:46:09
91氏の答え以上に
答えようが無いし、これで出来るはずなんだけどなぁ

聴く方ももっと、具体的に自分なりに考えて書いたコード載せて
何をしたいのか、明確にしたほうが良いと思われ

ここで、もらった答えをコピペでは
その場しのぎにしかならないよ

96 :デフォルトの名無しさん:05/02/04 00:03:49
Excel vbaに限って言えば、プログラム経験が全くない人がウェブで質問しているケースが
多いように思う。
碌に変数の定義のしかたさえ知らない輩が、答えを教えてもらってシメシメとか思っているん
だろうな。第三者の視点から見ていても、今後の保守管理を当人が出来るのか心配になって
くるよ。

俺は絶対に自分が理解できるまで、他人から教えた貰ったコードは流用しないがね。

97 :デフォルトの名無しさん:05/02/04 18:41:59
VBAを使えるようになりたいと思って本屋さんに行ってきたんですが
ワードのVBA、エクセルのVBAと、別々の本になってました。
まさかそれぞれが独立してるとは思ってなかったので
何も買わずに帰ってきました。

最初にどれから学ぶべきなんですか?
ちなみに僕はアクセス使ってて、
最初から定義されてるマクロだけじゃ思うように出来なかったので
VBAをと思ったんですが。
でも、どうせ憶えるならエクセルのが良さそうだし・・・

98 :デフォルトの名無しさん:05/02/04 19:37:43
>97
勉強する目的を明確にしろ。
それ以上助言できん。


99 :デフォルトの名無しさん:05/02/05 00:19:43
>>97
ExcelかAccessがええんとちゃう

いや、俺もこれから覚えたいのだが
Word VBAって意味ある?

100 :デフォルトの名無しさん:05/02/05 00:37:16
漏れの職場では一部の課が桐とか使ってるが

今から勉強するならExcelかAccessだろうな
Excelも、その内部にVBそのものが実装されてるから
極めるとAccessのファイルやらCSVファイルやらオラクルのファイルをコントロール出来るようになる

VBAはExcelからはじめるのが取っ掛かりやすいかと
必要であれば、その先にあるAccessとかVB、SQL、オラクルを勉強すればいいし

Word は・・・・
会社の方針でワードで作ってくれと
言われなきゃ使わないなァ
Word VBAも使ってない

101 :デフォルトの名無しさん:05/02/06 21:35:16
OutlookのVBAを使ってみようと思ったらマクロ自動記録機能がないから、
どんなソース書けばいいかわからん。ヘルプじゃわからんし。ガックシ

102 :デフォルトの名無しさん:05/02/06 22:06:51
shellからOutlookExpressを起動させてメールを作成したいんですが、添付ファイルの
やり方がわからない・・・。誰か教えてくれないかなぁ。↓ネットで検索してここまでは分かった
だが。

Shell "C:\Program Files\Outlook Express\msimn.exe /mailurl:mailto:宛先?bcc=宛先&subject=件名
&body=本文%20"


103 :デフォルトの名無しさん:05/02/06 22:53:34
word VBAはいらんかも。
俺ならexcelかaccessでデータ抽出・適当に加工後、wordを起動して張り付ける。
情報処理の観点からすれば、それで十分でしょ。

104 :デフォルトの名無しさん:05/02/07 20:30:59
>>102
なんで、そんなメールボムみたいなのを作ろうとしてるんだ?

105 :デフォルトの名無しさん:05/02/07 20:35:28
sheet1からsheet2のセルをクリアしようとするとほんの一瞬画面がsheet2に移ってしまいます。
これをうつらないようにするにはどうしたらいいんでしょうか。

またhideで隠していたシートをvisible = trueとして表示する時にも同じように一瞬画面がそのシートに移ってしまいます。
これもどうしたら直るのかおしえてください。

106 :デフォルトの名無しさん:05/02/07 21:14:12
openするまえにhideする

107 :>104:05/02/07 21:27:26
得意先とのやりとりに使うプログラムなのでメーラーに送信履歴を残しておきたいのだよ。
メルボするなら態々メーラーを起動しないでSendMailを使って送信するわな。

108 :デフォルトの名無しさん:05/02/07 21:30:37
ログファイル作るだけでいいじゃん

109 :デフォルトの名無しさん:05/02/07 21:53:56
営業や重役がOEで確認したいんだとさ。



110 :105:05/02/07 23:04:28
hideしていたのを戻す時にも画面が移ってしまうんですが、それはどうしたらいいのでしょうか?

111 :デフォルトの名無しさん:05/02/07 23:14:46
よく読んでないが、

Application.ScreenUpdating = False

でどう?

112 :デフォルトの名無しさん:05/02/07 23:21:07
おお!できましたっ!!
ありがとうございます。


113 :デフォルトの名無しさん:05/02/09 15:20:08
質問させて下さい
Case文で、特定のセルに入力された時間の値を下記のように取得させたのですが

例) Case Is = TimeValue("7:00")

これを2つのセルから値を取得できる様にしたいのですが

Case Is = セルA1TimeValue("7:00") and セルA2TimeValue("7:00")

このようにする形式はあるでしょうか?
2つのセルから値を取り出して、どちらも正ならばAの処理をするとしたいのですが。
どうかご教授下さい。

114 :デフォルトの名無しさん:05/02/09 22:21:22
>>113
  Select Case True
  Case Range("A1").Value = TimeValue("7:00") And Range("A2").Value = TimeValue("7:00")
    MsgBox "どちらもTrueなのでAの処理をする"
  End Select

ってこと?

115 :デフォルトの名無しさん:05/02/10 00:15:26
読み辛いなぁ。
これならifにandで羅列していったほうが可読性は高そうだが・・

116 :デフォルトの名無しさん:05/02/10 01:32:53
そうか?
Select Caseは自分の場合、殆ど使わなかったんだが
Target.Value をつかうことしか思いつかなかったよ
Select Case Trueの"True"を使うことでずいぶんスッキリまとまっていて
114氏のセンスのよさを感じたよ

With Target
If .Address = "$A$1" Or .Address = "$A$2" Then
If Range("A1").Value = TimeValue("7:00") And Range("A2") = TimeValue("7:00") Then
MsgBox "Aの処理をする"
End If
End If
End With

漏れの頭ではこんなふうにしか書けなかったよ

117 :113:05/02/10 10:46:55
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$5:$D$6" Then
Select Case True
Case Range("D5").Value = TimeValue("7:00") And Range("D6").Value = TimeValue("20:00")
Range("D43:BH43").Interior.ColorIndex = 4
Case Else
Range("D43:BH43").Interior.ColorIndex = xlNone
End Select
End If
End Sub

>>114様ありがとうございました、教えていただきました通り
上記のように関数を書き換えてみました、しかし巧く動作してくれません
何処か書式に誤りがあるでしょうか?

118 :113:05/02/10 11:02:24
質問し直したばかりですが、いまうまく動作させることができました。
慌ててしまい失礼しました。
下記手直しの文です。


Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$D$5" Or .Address = "$D$6" Then
Select Case True
Case Range("D5").Value = TimeValue("7:00") And Range("D6").Value = TimeValue("20:00")
Range("D43:BH43").Interior.ColorIndex = 4
Case Else
Range("D43:BH43").Interior.ColorIndex = xlNone
End Select
End If
End With
End Sub




119 :114:05/02/11 00:48:12
>>118
そういう処理なら、私ならこう書きます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Check As Boolean
  
  If Intersect(Target, [D5:D6]) Is Nothing Then Exit Sub
  Check = Range("D5").Value = TimeValue("7:00") _
    And Range("D6").Value = TimeValue("20:00")
  Range("D43:BH43").Interior.ColorIndex = IIf(Check, 4, xlNone)

End Sub

120 :デフォルトの名無しさん:05/02/11 06:06:08
114はいい!
良いセンスしてる。


121 :118:05/02/11 19:12:05
>>114

こういう処理もあるのですね、参考になりました。

  If Intersect(Target, [D5:D6]) Is Nothing Then Exit Sub
  Check = Range("D5").Value = TimeValue("7:00") _
    And Range("D6").Value = TimeValue("20:00")
  Range("D43:BH43").Interior.ColorIndex = IIf(Check, 4, xlNone)

1行目の[D5:D6]の部分と 2、3行目の("D5")("D6")と同期して、4行目の処理が行われますが
参照セルを増やして個別の処理をさせることはできるでしょうか?

1行目の[D5:D6]を[$A:$B]などに代入処理して、別途式を作る途中ですが
例えばD7に値が入力された場合、2、3、4行目の処理内容を変えるようにできるでしょうか?

122 :デフォルトの名無しさん:05/02/11 19:12:22
条件付書式をマクロでいじる方法ありますか?

123 :デフォルトの名無しさん:05/02/11 19:22:25
ありません

124 :デフォルトの名無しさん:05/02/11 19:37:33
>>122
マクロの記録でちゃんと記録されるよ。
あとは自分で好きなように弄ればいい。
「FormatConditions」でググれば解説してるサイトもあるし。

125 :デフォルトの名無しさん:05/02/11 19:37:59
excelのVBAについてお聞きしたいのですが。

例えば、A列が分類分け、 B列が値 
そして、C列は、A列に応じた計算式によって値が入る

Aが ○ だったら C=B*100
Aが ● だったら C=B*200
Aが ■ だったら C=B*300
※○●■はキーワード

みたいな感じにしたいのです。
いろいろ勉強して、select caseを使うことによって
1件目限定なら実現できたのですが

それを、A列にデータが入っていれば2件目以降にも
自動的に適用されるようにすることができません。

どなたかアドバイスをいただけないでしょうか?
レベルは初心者です。


126 :デフォルトの名無しさん:05/02/11 20:05:08
>>125
>A列にデータが入っていれば2件目以降にも 〜
というのがよく判らんのだけど、ここら辺もう少し詳しく書いてくれたら。

127 :デフォルトの名無しさん:05/02/11 20:31:28
125です。

>>126
説明が足らなくて、申し訳ありません。

例えば、野菜を扱う表だったとして

A1 に大根 と入力すれば C1=B1*100 の値
A2 に人参 と入力すれば C2=B2*200 の値
A3 に白菜 と入力すれば C3=B3*300 の値

という感じです。
うまく伝わればよいのですが。

この表で言えば、A1の部分(1件目)だけなら、調べたサンプルを参考に
成功したのですが、この定義を2件目以降にも適用しようとして、
詰まっています。

入力済みデータの件数を取得して for next を使って、select caseを使ってとか
いろいろやってもうまくいかないもので。
近くに詳しい人もいない環境なので、良いアドバイスをいただけたらと思います。




128 :デフォルトの名無しさん:05/02/11 20:40:25
>>121
やりたいことをもっと詳しく説明してくれないと、なんとも言えません。
たぶんできるとは思いますけど。

129 :デフォルトの名無しさん:05/02/11 20:45:29
excelでやるもんじゃないな

130 :デフォルトの名無しさん:05/02/11 20:46:36
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column = 1 Then
If .Value = "大根" Then
.Offset(0, 2).Value = .Offset(0,1).Value * 100
ElseIf .Value = "人参" Then
.Offset(0, 2).Value = .Offset(0,1).Value * 200
ElseIf .Value = "白菜" Then
.Offset(0, 2).Value = .Offset(0,1).Value * 300
End If
End If
End With
End Sub

そういうのは>>88を参考にOffsetを使うと良いよ
多分、Select Caseとか価格表とか使って操作した方が
もっと、スマートに記述できると思うが。

131 :デフォルトの名無しさん:05/02/11 20:56:36
話し変わるんだけど、喪前らDim とか Constとか
最初に記述する宣言文って、やっぱり全部、Subの先頭に集めてる?

漏れの場合は、Subの中で分かれた各処理群の先頭に分割して
Dimを記述してるんだけど

一箇所にまとめるとどの宣言文だったか
分からなくなってくるんで・・・


132 :デフォルトの名無しさん:05/02/11 21:00:35
>>130
価格改定されるたびにソース直すのか

133 :デフォルトの名無しさん:05/02/11 21:03:50
>>131
普通、先頭じゃないか?

134 :デフォルトの名無しさん:05/02/11 21:04:45
>>132
俺もそう思いながら書いたんだw
3つしか書いてなかったから

そこは、価格表とかつくってやればいいかと。

135 :デフォルトの名無しさん:05/02/11 21:10:58
つーか130はインデントしろよ。

136 :121:05/02/11 21:17:31
>>128
D5:D6のセルを参照してD43:BH43の色を変更していますが

この式のまま、多数の参照先とそれに対する処理を作りたいんですが。

1行目の[D5:D6}と2、3行目の("D5")("D6")、そして4行目の("D43:BH43").を代入演算子で置き換えて

  If Intersect(Target, [$A:$B]) Is Nothing Then Exit Sub
  Check = Range("$AA").Value = TimeValue("7:00") _
    And Range("$BB").Value = TimeValue("20:00")
  Range("$C1:$D1").Interior.ColorIndex = IIf(Check, 4, xlNone)


$A = D5ならば$AA=D5、$BB=D6、$C1=D43、$D1=BH43  D7ならば別のセルを割り当てる

として、想定したセル内に値が入力されるとこの式で処理できるようにしたい訳なのですが。。

137 :デフォルトの名無しさん:05/02/11 21:19:48
RDB使えよ

138 :デフォルトの名無しさん:05/02/11 21:36:44
>>124
ありがとう

>>123
知ったかクンさようなら

139 :デフォルトの名無しさん:05/02/11 21:41:13
>>136
>D7ならば別のセルを割り当てる
この場合それぞれどのセルになるのかまで分からなければ
コードを簡略化させる時の法則がわかりません。


D列の場合のみ処理するというのであれば、最初の行を

If Intersect(Target, [D:D]) Is Nothing Then Exit Sub

にしておけばよさそうですが。

140 :デフォルトの名無しさん:05/02/11 21:44:09
>>139
「最初の行を」じゃなくて「最初の行だけは」でした。

それ以降の部分は、D7の時どうなるかによって変わります。

141 :デフォルトの名無しさん:05/02/11 21:58:48
125です。

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

野菜は例えで使っただけで、
実際に扱うものは、めったに単価が変わらないんですよ。
(ほぼ100掛けなんだけど、たまに200掛けとか300掛けのが混じったりとか)

だから、あらかじめその分類ごとに計算式を取得できたら
楽だなと思ったもので。
あとはEXCELの勉強の意味もあります。

教えていただいた構文は、うまく動作しませんでした。
もう少しにらめっこしながら、悩んでみます。

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

142 :139:05/02/11 22:29:48
43行目から色を変えてるわけだからMAXでも42行目なのかな。

5行目以降から処理するとして、

If Intersect(Target, [D5:D42]) Is Nothing Then Exit Sub

でしたね。

143 :121:05/02/12 08:51:16
>>142

レスありがとうございます

TargetセルはD5〜G10の範囲なんですが、Targetを指定したとして
2行目以降の処理を個別に指定したいのです。

Targetセルが一つであれば以降の式には、そのままセル名を直接書けばいいのですが
複数指定した場合、配列に格納しておいて自動的に消化される様にできないかと思ったんです。

$A = (Target A = 処理A、 Target B = 処理B、 Target C = 処理C)

簡単に考えるとこういう物で、以降の該当箇所に代入されて処理されていく様にできないでしょうか?

144 :デフォルトの名無しさん:05/02/12 09:24:31
>>143
あなたのやりたいことがいまいちわからないのですが、
以下のコードで参考になりますか?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ChangeArea As Range
Dim Cell As Range

  Set ChangeArea = Intersect(Target, [D5:G10])
  If ChangeArea Is Nothing Then Exit Sub
  For Each Cell In ChangeArea
    MsgBox Cell.Address '一つのセル
  Next Cell
End Sub


ここのセル(例えばD7,E8,F9,G10)がそれぞれこうだったらここのセルに
こういう処理をするというのを書いてもらえればわかりやすいんですけどね。

145 :143:05/02/12 11:11:46
>>144


  If Intersect(Target, [D5:D6]) Is Nothing Then Exit Sub
  Check = Range("D5").Value = TimeValue("7:00") _
    And Range("D6").Value = TimeValue("20:00")
  Range("D43:BH43").Interior.ColorIndex = IIf(Check, 4, xlNone)

それぞれの処理についてですが

D5に7:00と入力され、かつ、D6に20:00と入力された場合は、D43〜BH43 に色を塗る
いまはこの処理のみですが

D7に7:00と入力され、かつ、D8に20:00と入力された場合は、D44〜BH44 に色を塗る
D9に7:00と入力され、かつ、D10に20:00と入力された場合は、D45〜BH45 に色を塗る

と処理先を変更したいのです。
参照先がこの程度なら、式をそのまま参照セル分コピーするのですが、参照先が膨大になるため代入処理したいと
思って居るんですが、なにか良い手はありませんか?


146 :デフォルトの名無しさん:05/02/12 13:47:20
>>145
それだけの情報しかないのであれば、こうなります。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Check As Boolean
  
  With Target
    If .Count > 1 Then Exit Sub
    If Intersect(Target, [D5:G10]) Is Nothing Then Exit Sub
    If .Row Mod 2 = 0 Then Set Target = .Offset(-1)
  End With
    
  With Target
    Check = .Value = TimeValue("7:00") _
    And .Offset(1).Value = TimeValue("20:00")
    .Offset(38 - (.Row - 5) \ 2).Resize(, 57).Interior.ColorIndex _
    = IIf(Check, 4, xlNone)
  End With

End Sub

E,F,G列の場合の色を塗る範囲が判断できませんので、それは
ご自分で工夫なさってください。

147 :デフォルトの名無しさん:05/02/12 22:25:44
ここ最近の10レスぐらいの間に
全て、やり方が散りばめられてるんだがなァ

Worksheet_Changeのトリガーを
.Column = 4 とかにして

あとはOffsetかCellsを使って
>>146 氏のOffsetとresize使うか
Range(Sheet01.Cells(.ROW, 4), Sheet01.Cells(i, 60)).).Interior.ColorIndex
とか使えば良いだけなんだが

148 :デフォルトの名無しさん:05/02/12 22:29:47
訂正
Range(Cells(.ROW, 4), Cells(.ROW, 60)).Interior.ColorIndex

149 :デフォルトの名無しさん:05/02/13 00:33:24
Sub ブック内ハイパーリンク作成()
Dim i As Integer
Worksheets.Add after:=Worksheets(Worksheets.Count)
i = Worksheets.Count
ActiveSheets.Name = "Sheet" & i
Worksheets(1).Activate
Worksheets(1).Hyperlinks.Add _
anchor:=Worksheets(1).Range("B65536").End(xlUp).Offset(1), _
Address:="", _
SubAddress:="'" & Worksheets(i).Name & "'!A1", _
TextToDisplay:=Worksheets(i).Name
End Sub

ActiveSheets.Name = "Sheet" & i の所いけないみたいなのですけど
どういう事なのでしょうか? エクセルのシートに名前が必要なのでしょうか?

150 :デフォルトの名無しさん:05/02/13 01:09:35
ActiveSheets.Name ×
ActiveSheet.Name ○

151 :デフォルトの名無しさん:05/02/13 01:09:36
Excel2000のVBAでUserFormにWebBrowserコントロールを貼って
以下のようなコードを書きました

Sub test()
UserForm1.WebBrowser1.navigate "http://www.2ch.net/2ch.html"
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
UserForm1.Show
MsgBox TypeName(pDisp)
MsgBox TypeName(pDisp.document)
End Sub

これを実行すると、まず左フレームに板一覧
右のフレームに「2ちゃんねるへようこそ」が表示され
一つ目のMsgBoxで「WebBrowser」と表示されるのですが、
二つ目のMsgBoxのところで
「実行時エラー'438':オブジェクトはこのプロパティまたはメソッドをサポートしていません。」
というエラーが出て止まってしまいます。

原因を調べようと、二つ目のMsgBoxのところにブレークポイントを設定し
pDispをウォッチしてみたところ、型が「Object/WebBrowser」と表示されてるにも関わらず
クラスメンバーが一つも無く「<変数なし>」と表示されるという不可解な状態でした。
何故こんなことが起こるのでしょうか?
これを検出し回避する方法はあるのでしょうか?

TypeName(pDisp)で「WebBrowser」と表示されてしまっては
WebBrowserクラスの持ってるメンバーは全て持っていると判断して
メンバー変数にアクセスしてしまうわけですが、
そこでエラーが出てしまって、どうコーディングしていいか困ってしまいました。
どなたか、よろしくお願いします。


152 :デフォルトの名無しさん:05/02/13 05:24:16
Excelのアドインを作成しているのですが、オリジナルのアイコンを
使ったツールバーも一緒に配布したいと思います。

faceidを使った既存のアイコンではなくてAdobeのAcrobatのように
オリジナルのイメージを使ったものなのですが
どうやればいいのですか。

ググって、ワークシートにあるビットマップをVBAでコピーして
facepasteという方法があることもわかったのですが、
xla内にあるワークシートにビットマップを置いておく方法が
わからないのです。

何かいい方法はありませんか。


153 :デフォルトの名無しさん:05/02/13 07:34:31
エクセルとか下らないプログラムをシェアで
出してるところってあるよな・・・しかもソース弄れないとか

154 :デフォルトの名無しさん:05/02/13 14:59:09
>>150
どうもありがとうございます。うまく起動することができました。

155 :デフォルトの名無しさん:05/02/14 12:42:22
Excel2000のVBAでjavascriptで書かれているwebをセルにコピーするコードを書きました。
そのページのソースには.jpgリンクがJavascript:DoLink("〇△□")
と書かれているのですが、このリンクを開いて保存するにはどうしたらいいか教えてください。

156 :デフォルトの名無しさん:05/02/15 05:48:54
>>155
得ろ画像収集プログラムでつか?w

157 :デフォルトの名無しさん:05/02/15 20:14:11
sheet1からsheet10まであって、sheet1!A1に例えば「sheet2]と入力してコマンドボタンをクリックすると、
sheet2!A1にジャンプするようにしたいのですが、どんなコードを書けばいいでしょうか?

158 :デフォルトの名無しさん:05/02/15 20:37:11
Application.Goto Sheets(ActiveSheet.Range("A1").Value).Range("A1")

159 :デフォルトの名無しさん:05/02/16 09:53:34
「!」(ビックリ)と「.」(ドット)ってどう違うんですか?


160 :デフォルトの名無しさん:05/02/16 10:11:54
object.method
form!field

161 :デフォルトの名無しさん:05/02/16 10:12:49
object.property
record!field

162 :デフォルトの名無しさん:05/02/16 18:22:37
ビックリ、、、
ドット、、、

ステキな呼び方ですねw

163 :157:05/02/16 19:29:07
>>158
上手い事行きました。
ありやした!

164 :デフォルトの名無しさん:05/02/17 01:02:06
あるブックを開くのをイベントとして、
特定のブックが存在するかどうかをチェックし、
なければ新たに作成し、その特定のブックのsheet1に名前を付ける
という記述をしようとしました。

Private Sub Workbook_Open()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not (FSO.FileExists("D:\特定.xls")) then
  Workbooks.Add
  ActiveWorkbook.SaveAs FileName:="D:\特定.xls"
ActiveWorkbook.Worksheets(1).Name = "名前"   
 End If
End Sub

これを実行してみると、新しい「特定.xls」は出来上がるのですが、
シートに名前がついてくれません。
何がまずいのでしょうか?

165 :デフォルトの名無しさん:05/02/17 12:20:48
>>164

Excel2000でやってみたらうまくいったよ。


166 :159:05/02/18 09:48:42
>>160-161
fieldを指定するとき!になるんですね。



167 :デフォルトの名無しさん:05/02/19 19:29:20
何秒間か待機するって、何かいい方法ありませんか?
for i=1 to 1000000 : next iだと秒数指定できないし。
GetTickCount使うんですかね。カウントが0に戻らないことを祈りつつ。

168 :デフォルトの名無しさん:05/02/19 19:30:29
>>167
javaなら
Thread.sleep(ミリ秒数);
でいいんだけどね。



169 :>>167:05/02/19 20:07:28
Application.Wait Now() + TimeValue("00:00:05")
MsgBox "5秒間待ってから実行します"

170 :デフォルトの名無しさん:05/02/19 23:40:03
便乗質問なんだが、VBAの
Application.OnTimeか
Application.Waitみたいな感じで
時間を_秒で指定する方法は無いんでしょうか?

171 :デフォルトの名無しさん:05/02/19 23:46:49
次はそうくるかと思ったが、VBAじゃミリ秒単位の指定はない。

172 :デフォルトの名無しさん:05/02/20 00:39:11
>>170
APIのSleep関数

173 :デフォルトの名無しさん:05/02/20 19:47:54
フォームのイベントで
CommandButtonを押したら、TextBoxのカーソル位置に
"hoge"を挿入ってのはどうやればいいのかな?
.Value="hoge"じゃ、いままで入力されてたものが消えてしまうし
.Value=.Value&"hoge"とかやっても、カーソル位置への挿入は出来ないし・・・
どなたかお教え願います

174 :デフォルトの名無しさん:05/02/20 20:16:36
「カーソル位置への挿入」ってどういうこと?

175 :デフォルトの名無しさん:05/02/20 20:23:39
>174
[foo|piyo    ]
 ↓
[foohogepiyo  ]

ってな感じ。( | がカーソル位置)

CommandButton押した時点でTextBoxからフォーカスが外れるから
無理かなとも思ったけど、どこかでこういう動作するフォームを使った覚えがあるし。
一体あれはどうやってたんだろう?

176 :174:05/02/20 20:56:38
Dim mylen As Integer
Dim mystart As Integer
Dim buf1 As String
Dim buf2 As String


mystart = TextBox1.SelStart
mylen = Len(TextBox1.Value)
buf1 = Left(TextBox1.Value, mystart)
buf2 = Right(TextBox1.Value, mylen - mystart)
TextBox1.Value = buf1 & "hoge" & buf2

こんなんで如何?
あと質問するときは○○な理由でうまくいかないって説明するよりも、自分が望んでいる
ことを最初に説明しちゃったほうが回答しやすいと思うよ。

177 :173:05/02/20 21:23:13
>>176
いいかんじです、ありがとうございました。
今度質問するときは忠告の件気を付けます。

178 :167:05/02/20 23:27:51
最初にアクセスだと書いておくべきだった。wait使えない…。
エクセル用ですね。でも、ひとつ勉強になりました。感謝。
API関数で何とかします。


179 :デフォルトの名無しさん:05/02/21 10:11:32
javaから移ったんですが、
プロパティも引数とるんですねぇ。
プロパティ()みたいに。



180 :デフォルトの名無しさん:05/02/21 11:45:52
あと「コレクション」というのも一種の「オブジェクト」なのですかねぇ。
「item」という「プロパティ」があるし。

javaで言うところのVectorクラスのインスタンスみたいなものなのかな?


181 :デフォルトの名無しさん:05/02/21 12:32:58
あふぉ?

182 :デフォルトの名無しさん:05/02/21 12:53:04
>>181
えー
どの変が間違ってますか?


183 :デフォルトの名無しさん:05/02/21 13:48:07
こりゃ相当な あふぉ だね。

184 :デフォルトの名無しさん:05/02/21 14:32:12
そんなこと言わないで教えてよ


185 :デフォルトの名無しさん:05/02/21 16:18:21
やーいあふぉー


186 :デフォルトの名無しさん:05/02/21 17:16:00
ちぇっもうおまいらになんか聞かないよ。
ばーか


187 :デフォルトの名無しさん:05/02/21 21:38:09
ユーザーフォームに何か入力をしたあとエクセルを閉じて
また開いた時にさっき入力した値がすでに入力されているようにするにはどうしたらいいんでしょうか。

188 :>187:05/02/21 22:04:28
シートに値を保存しておくのが手っ取り早いのでわ?

189 :デフォルトの名無しさん:05/02/21 22:19:20
宣言セクションで宣言した変数に値を格納しておいて
ユーザーフォームを開いた時にそれをテキストボックスに代入するようにしておくとか。
まあStatic変数でもいいけど。

190 :187:05/02/21 22:33:31
>>188さん>>189さん
お答えいただいてありがとうございます。
なんとかできそうだと思います。

191 :デフォルトの名無しさん:05/02/21 23:03:02
189さんの方法ってエクセルを閉じた後、再度開いても保存した値を取り出すことができるの?
だとしたら詳しく教えてほしい。

192 :デフォルトの名無しさん:05/02/21 23:17:48
ゴメン、フォーム閉じた場合じゃなくてExcel閉じた場合は無理だ。
一応VBAのみで変数の値を保持する方法もあるけど、超面倒なので割愛する。

193 :デフォルトの名無しさん:05/02/21 23:37:03
俺もシートに値を保存するって方法をよくとるんだけど、なんかスマートじゃないような
気がしてね。これが最善の方法なのかなぁ?

194 :デフォルトの名無しさん:05/02/22 00:03:58
値保持用に不可視シート作るとか

195 :デフォルトの名無しさん:05/02/22 08:09:58
ini ファイルだろ
ブック本体を上書きしてしまうなどオレには考えられん

196 :デフォルトの名無しさん:05/02/22 22:04:22
漏れも、ややこしい配列を呼び出して一時的に保管する時に
不可視シートをやむなく使うなァ

不揮発性の二次元配列なんかあると便利なんだが

197 :>>195:05/02/22 22:18:52
ブックと一緒にiniファイルを保管せにゃならん。
メンドクサ。


198 :デフォルトの名無しさん:05/02/22 22:36:13
iniだけはダメだよ。
あれは素人のやること。

199 :デフォルトの名無しさん:05/02/23 04:46:12
ATLでDLL作ってそっちに保存

200 :デフォルトの名無しさん:05/02/23 05:03:00
>>199
ネタだよね。
まさか今時そんなダサいことやってる奴が居るわけないよな。

201 :デフォルトの名無しさん:05/02/23 11:57:18
EXCEL2000の[セルの書式設定]-[表示形式タブ]
の数値に[小数点以下の桁数]っていうテキストボックスの中にスピンボタンが
入っているコントロールがあるんだけど、これはなんというコントロールですか。
VBAにはないですか?

202 :デフォルトの名無しさん:05/02/23 13:50:33
>>201
ネタで言ってるんだよね。

203 :デフォルトの名無しさん:05/02/23 14:39:58
マジです。

204 :デフォルトの名無しさん:05/02/23 18:16:45
>>201
あれは、EDTBX(エディットボックス)といいます。
VBAには、ありません。
スピンボタン と テキストボックス を組み合わせて、同じような昨日を実装してください。

205 :201:05/02/23 18:42:42
そうなんですか。ありがとうございました。

206 :デフォルトの名無しさん:05/02/23 19:03:06
EDTBX

207 :デフォルトの名無しさん:05/02/23 19:38:55
>>200
マジです

208 :デフォルトの名無しさん:05/02/23 19:50:06
>>207
マゾです

209 :デフォルトの名無しさん:05/02/23 23:05:40
excelで,single型に宣言した配列変数に,セルの値(小数)を入れたいのですが,
↓で失敗.正しくはどうやるのか教えてください
 dim dat() as single
 dat(i)=cells(x,y).value

210 :デフォルトの名無しさん:05/02/23 23:18:39
>>209
値を格納する前に要素数を指定

211 :デフォルトの名無しさん:05/02/23 23:22:51
datは可変配列なのに、redimしてない

212 :デフォルトの名無しさん:05/02/23 23:48:05
209です.
ごめんなさい.間違えました.
↓で失敗しました.要素数は指定していました.
dim dat(a) as single
dat(i)=cells(x,y).value

>>210,211
ご指摘ありがとうございます.

213 :デフォルトの名無しさん:05/02/23 23:52:27
エラーメッセージでなんと出るかくらい書いたら?
まさか変数iが定義されていないってオチはないよね。

小出しにしないでコード全てコピペすれ。
問題を解決したいのであれば。

214 :デフォルトの名無しさん:05/02/24 00:43:18
dim dat() as single
...
他の処理
...
redim dat(a) as single
dat(i)=cells(x,y).value

215 :デフォルトの名無しさん:05/02/24 00:49:30
それで原因がわかるかよ。
他所でやれ

216 :デフォルトの名無しさん:05/02/24 01:28:55
>>214

> 小出しにしないでコード全てコピペすれ。
> 問題を解決したいのであれば。

コードに
> ...
> 他の処理
> ...
こんな行が本当に含まれるならエラーが出るのは当然だが。

217 :デフォルトの名無しさん:05/02/24 19:53:57
VBAで作ったPGって誰でもコード書き換えたりできますよね?
これってプロテクトみたいなのかけられないのでしょうか?

218 :デフォルトの名無しさん:05/02/24 20:03:06
普通にパスワード掛けてロックすればいいんじゃないの?

まぁ、実はこの方法ではイベントプロシージャは丸見えなんだけどね。
そこはイベントプロシージャ上にコード書かなければいいだけだし。

219 :デフォルトの名無しさん:05/02/24 23:19:25
VBAで文字を動かしたりできませんか
こう、スクロールしたりとか

220 :デフォルトの名無しさん:05/02/25 02:04:13
dim aho as string
dim i as integer
aho = "あほばかまぬけ"
for i = 1 to len(aho)
print mid(aho, i)
next i


221 :デフォルトの名無しさん:05/02/26 14:47:33
最上位のApplicationオブジェクトについて質問です。
このオブジェクトを使うときに
Dim app As Application
Set app = ActiveWindow.Application
とかやって
appオブジェクトにプロパティやらメソッドやらをつけてやらなくてもいいのはなぜですか?

みんなクラス名をそのまま使って
Application.Worksbooks("Book1.xls")........
とかやってる。

インスタンスを作らなくていいんですか?



222 :デフォルトの名無しさん:05/02/26 18:29:47
>>221
言語仕様上許されているから、としか言いようがない。

インスタンスを作ってプロパティ経由でメンバにアクセスするように
したらバグを減らせる可能性が高いけどね。

そういう概念を知らない人、知ってても使わない人、色々
居るのでしょう。

223 :デフォルトの名無しさん:05/02/26 19:47:31
GetOpenFilenameとかで特定ののディレクトリを指定して開きたい場合くらいしか
きちんと宣言したりしないな。

224 :デフォルトの名無しさん:05/02/26 21:43:18
ApplicationクラスのそれらのメソッドやらプロパティはShared宣言されているから
と言ってみるテスト


225 :デフォルトの名無しさん:05/02/27 00:53:24
独学でVBAしか勉強した事ないんで
いつも感覚的にコード書いてるんだけど

なんか、そういうVBAの構造とか概念の書いてあるいい本ってあります?

226 :デフォルトの名無しさん:05/02/27 11:31:30
すいません。質問させてください。
一つのセル内で改行されているセルを二つのセルに分割したいのですが。

セルA1の値が
"みかん リンゴ"
というようにスペースなどで分割されている場合は下記のように
splitを使ってB1、C1に振り分けることが出来たのですが、

Sub test()
Dim A() As String

A = Split(Cells(1, 1).Value, " ", 2)
Cells(1, 2).Value = A(0)
Cells(1, 3).Value = A(1)
End Sub

一つのセル内で
みかん
リンゴ

というように改行されている場合にどのように分割すればいいのか分かりません。
どなたか教えてください。よろしくお願いします。

227 :デフォルトの名無しさん:05/02/27 11:43:12
>>226
vblfですぷりっとぉ

228 :デフォルトの名無しさん:05/02/27 12:35:35
>>227
ありがとうございました!

229 :デフォルトの名無しさん:05/02/27 14:35:09
>>225
それがなかなか見当たらないよねぇ。
microsoft社のヘルプにさえよく書かれていない。

vbaに関する本で、オブジェクトやらメソッドやらプロパティやらが詳しく載っている本を参考にするとかなさそうだね。

ところで、>>221の答えは>>224でいいのかな?


230 :デフォルトの名無しさん:05/02/27 15:56:58
>>225
VBのサブセットなんだから、例えばVB6の入門書を読めばいいんじゃないの。
言語仕様が解説してあるようなやつ。
229の云うようなプロパティ辞典的なものも併せて読んでくとか。

231 :デフォルトの名無しさん:05/02/28 18:49:18
>>225 >>226
言語仕様が行き当たりばったりなんだから
構造とか概念も糞も元から無いんだよ

232 :デフォルトの名無しさん:05/02/28 21:46:30
初めまして。質問なのですが
ExcelのデータをAccessに取り込みたいのですが
どうすればいいのでしょうか?
AccessにあらかじめExcelから抜き出したい列をテーブルとして
作成しておいて、そこにExcelからのデータを落とし込みたいのです。
最終的にはExcelファイルを指定してそのデータをAccessに落とし込みたいのですが・・・

何か参考になるサンプルコードやサイトがあれば教えてください。
よろしくお願いします。

233 :デフォルトの名無しさん:05/02/28 22:42:03
まずはDAO、ADOでググる。


234 :デフォルトの名無しさん:05/02/28 22:47:36
>233に追加して
TransferSpreadsheetもググる事をお勧めする。

235 :デフォルトの名無しさん:05/03/01 08:53:25
TransferSpreadsheetってAccessのインストールするときに
カスタムにしてコンポーネント入れとかないといけないんだよね。
配布したときにお客さんがそれ忘れてるとかなり困ったことになる。


236 :232:05/03/01 14:33:06
あれから色々調べて、何とか指定したエクセルデータをテーブルに
格納することに成功しました。ありがとうございます。
そこでまた質問なのですが
指定フォルダ直下にあるエクセルファイルを全て読み込んで
テーブルに格納したいのです。例えばCドライブ直下に
エクセルファイルが3個あったとしたらそれを全て順番に
読み込んでテーブルに格納したいのです。(エクセルファイルの
書式や列数は全て同じです)フォルダを指定するダイアログを
表示することはできていてそれを使いフルパスを取得することも出来ます。
しかし、この後どうすればいいのか分からないのです。
どうかご教授よろしくお願いします。

237 :デフォルトの名無しさん:05/03/01 20:08:29
>>236
ここの
http://www.microsoft.com/japan/msdn/columns/office/office09072000.asp
「フォルダ内のすべてのファイル名を取得するために Dir 関数を使用する方法」
を参考にしたら。ファイル名を取得してファイルの数だけ反復処理する。


238 :デフォルトの名無しさん:05/03/01 22:42:48
「ムケてない香具師」の典型的パターンだな


239 :232:05/03/02 21:40:51
今日、色々と試行錯誤しまして、フォルダを指定後、
直下にあるExcelファイルを全てAccessのテーブルに格納する事に
成功しました。自分で適当に作った簡単なExcelファイルなら
格納できるのですが、マクロの入っている(正しい表現ですか?)Excel
ファイルだと格納できないのです。Access側のVBAでマクロの入った
Excelファイルをテーブルに格納することって出来るのですか?
よろしくお願いします。

240 :デフォルトの名無しさん:05/03/02 21:49:45

「〜ですか? よろしくお願いします。」
と言う使い方は日本語的におかしいと思うのは俺だけですか?
よろしくお願いします。

241 :デフォルトの名無しさん:05/03/02 23:14:16
ExcelのマクロをAccessに取り込みたいの?


242 :232:05/03/03 00:14:22
>>241
いえ・・・Excelのデータを取り込みたいのです。つまり
ExcelのデータがそのままAccessのテーブルに入るように
したい(もちろんAccessの方では事前にテーブルを用意しておいて)です。

でも実行しようとすると
マクロが有効になっているとか何とか(よく覚えてなくて・・・スイマセン)
出て、その後エラーナンバー13「型が一致しません」と出ます。
Accessのテーブルは試験的な段階なので全部テキスト型にしてあるし
Excelの方もマクロが使ってある以外はこれといって普通の文字列データに
見えます。原因が全く分からないので、どなたかご存知の方
ご教授ください。よろしくお願いします。

243 :デフォルトの名無しさん:05/03/03 21:10:04
エクセルのセキュリティの設定でマクロ開くときのチェックをはずしておけ

244 :デフォルトの名無しさん:05/03/04 11:39:05
URLのリンク先が存在するかチェックしたいのですが、
ご存知の方がおられましたら、
よろしくお願いします。


245 :デフォルトの名無しさん:05/03/05 14:44:56
ん?
サーバーが実在するかどうかってこと?
それとも 404 が戻ってくるかどうかを見るってこと?
存在してもたまたまそのとき落ちてたら存在しないって判定したいの?

246 :デフォルトの名無しさん:05/03/06 17:07:43
Private Sub UserForm_Initialize()
Load UserForm2
With UserForm2
.StartUpPosition = 0
.Top = 50
.Left = 10
.Show
End With
End Sub

名前が不適切というエラーが出ちゃいます。
フォームに何かしなければいけないのでしょうか?

247 :i:05/03/07 00:16:23
早速ですが、今更と思われそうですがエクセル95のVBAで
FSO(File System Object)は、使えますか?
自宅には当然95なんてシロモノは無いので、確認がとれません
会社でぶっつけ本番でもいいのすが不安で・・
ところで、アクセス95ってDAOくらいはぶん回せるのかしら・・・
不安不安不安・

248 :i:05/03/07 00:17:37
247ですが、間違えました。アクセス95のVBAでFSOでした

249 :デフォルトの名無しさん:05/03/07 00:42:36
>会社でぶっつけ本番でもいいのすが不安で・・

よくないと思うが・・・。
今後色々と大変だと思うけど、ま、頑張ってね。

250 :デフォルトの名無しさん:05/03/07 00:43:55
Excel97でMicrosoft Forms 2.0 Object LibraryのDataObjectに
レイトバインディングしたいと思ってます。
CreateObject("???")の ???の部分はなんて設定したらいいの?
ググってもわからんかったよ。すまん。
教えてエロいひと!!

251 :デフォルトの名無しさん:05/03/07 01:30:51
アクセス95でAccess Basicに取って代わり VBA2.2に。
VB4.0との統一もそれと同時でDAOのバージョンは3.0で
回せるのではないでしょうか。
95で足りている環境ならブッツケ本番でも充分対応できる筈。
気楽にやってみてはいかがでしょうね>>247



252 :i:05/03/07 01:36:23
ありがとうございます。でもそんな大それたモン
使う価値あんのかしら・・なんて


253 :sage:05/03/07 01:39:43
時間の無駄かもよ。金儲けだからしょーねーじゃん?

254 :デフォルトの名無しさん:05/03/07 01:55:20
ところで、喪前らエクセルのVBAで金儲けしてるの?


255 :デフォルトの名無しさん:05/03/07 09:27:03
格好つけてVTFO使うよりVBA。
VTFO資料無さ杉。

256 :デフォルトの名無しさん:05/03/08 22:46:36
EXCEL2000で、セルを指定してCSVに書き出す方法はありますか?

257 :デフォルトの名無しさん:05/03/08 23:12:21
>>256
> 方法はありますか?
あります。

というかうちの個人用マクロブックに
「選択範囲をCSV形式で出力」ってのがある。

258 :デフォルトの名無しさん:05/03/08 23:38:36
>>257
ありがとうございます。
確認してみますね。

259 :デフォルトの名無しさん:05/03/09 02:05:48
>>255
VTFOってなに?

260 :デフォルトの名無しさん:05/03/09 10:59:49
>>259
VSTOのことじゃね?

261 :デフォルトの名無しさん:05/03/15 22:46:23
条件付き書式について教えてください。
フォームのテキストボックスに入れた日付の値が、
土日と、「休日」という国民の祝日の一覧を入れた範囲の値と同じものだと背景が赤文字になるようにしたいのです。

=OR(WEEKDAY($A1,3)>=5,COUNTIF($K$1:$M$16,$A1)+COUNTIF(休日,$A1)
セルの条件付き書式では上の記載でいけたのですが、VBAだとどう書けばいいでしょう。
そのままぶっこんでも当然動かないし…

262 :デフォルトの名無しさん:05/03/15 22:55:36
>>261
条件付き書式自体が適用されないなら、
マクロの記録でも使って勉強しろ。
条件付き書式は適用されてるが、思い通りの結果を返さないなら、
VBAで条件付き書式を設定したセルの書式条件式がどうなってるか調べろ。
おそらくセル位置の指定方法を間違ってるんだと思うけど。

263 :デフォルトの名無しさん:05/03/16 23:23:28
ある資格試験の勉強をしてるんですけど覚える事が沢山あって大変で
エクセルやワードなんかで表を作ったりしてそれをプリントアウトして勉強
してるんですが一々面倒くさくなってしまったのでいっそのことVBAで問題
作ってしまおうと考えて、いまVBAの勉強を始めてます。一枚のシートで
Aセルに問題、Bセルに答えと言うようにしてテキストボックスにキチンと
漢字も間違わずに正確に語句を書けば正解と言うようにしてシートに自分
で幾らでも問題を追加して作れるようにしたいんですがこういう事はVBAで
可能ですよね?

264 :デフォルトの名無しさん:05/03/17 00:35:50
意味がわからん。


265 :デフォルトの名無しさん:05/03/17 01:37:38
>>263
わざわざVBA使わないでも、
A1に問題、B1に答えを記入する欄、C1に"=If(B1=C1,"正解!","残念!")"、D1に解答として、
D列を非表示にすれば良いだけなのでは?

266 :デフォルトの名無しさん:05/03/17 09:33:36
>>265
有難うございます。その式を基本にして何とか作れそうです。

267 :デフォルトの名無しさん:2005/03/28(月) 13:13:39
Access2000を使っている者です。
Accessのマクロを、VBAプログラムから生成することってできるんでしょうか?
逆のこと(マクロをVBAに変換)はできるのですが・・・
ご存知の方おられましたらよろしくおながいします。

268 :デフォルトの名無しさん:2005/03/28(月) 13:25:37
Accessのマクロ = VBA

269 :デフォルトの名無しさん:2005/03/28(月) 13:31:28
>>268
では正確にいえば「マクロオブジェクト」すなわち「データベースウィンドウ」の「マクロ」欄に一覧表示されるべきオブジェクトをVBAスクリプトから作りたい。といったらよいですか。

「Accessのマクロ = VBA 」そんな既知のことはあえて聞かない。

270 :デフォルトの名無しさん:2005/03/28(月) 13:36:41
テスト

271 :デフォルトの名無しさん:2005/03/28(月) 13:37:37
うゎ、こいつマクロの概念からして解ってないのかよ・・・

272 :デフォルトの名無しさん:2005/03/28(月) 17:42:53
質問です。
ACCESSのVBAで、自分自信(MDB)が存在するフォルダまでのパスを取得する方法は無いでしょうか。
かなり探したのですがカレントディレクトリを取得する方法くらいしかみつかりませんでした。
配布して使いたいので、利用者がどのドライブのどのフォルダに設置するかわからないので、なんとか実現したいのですが。
よろしくお願いします。

273 :デフォルトの名無しさん:2005/03/28(月) 18:00:47
Sub hoge()
 MsgBox ThisWorkbook.Path & "\" & ThisWorkbook.Name
End Sub

Excelだとこんな感じでフルパス取得出来るけど。(フォルダまででいいなら& "\" & .Nameは不要
使ってないからよくわからんがACCESSも同じような方法あるんじゃないの?

274 :デフォルトの名無しさん:2005/03/28(月) 22:45:26
>>272
ttp://www.nurs.or.jp/~ppoy/access/access/acM019.html

275 :デフォルトの名無しさん:2005/03/28(月) 23:21:03
>>273-274
ありがとうございます。目的のことができそうです。

276 :デフォルトの名無しさん:2005/03/29(火) 08:02:12
>>267 はVBAをマクロ化したいのではなく、
VBAで「マクロオブジェクト」を作りたいのだと思う。

277 :デフォルトの名無しさん:2005/03/30(水) 13:05:49
保守性が下がるだけだと思うけど・・・

278 :デフォルトの名無しさん:2005/03/31(木) 17:23:09
テキストボックスにフォーカスされた状態で一定のキーボードからの入力を
受け付けないようにするにはどう書けばいいのでしょうか?

279 :デフォルトの名無しさん:2005/03/31(木) 17:35:55
> 一定のキーボードからの入力を受け付けない
とはどういうことですか?
日本語で説明してください。

280 :デフォルトの名無しさん:2005/03/31(木) 17:36:56
>>278
KeyPressのときに
if KeyAscii = ○○ then
  KeyAscii=0
end if
にすればいいと思う。
○○はキーボードからの入力を受け付けたくないキーの
KeyAcsiiコードで。

と俺は思った。


281 :デフォルトの名無しさん:2005/03/31(木) 17:43:49
"一定"じゃなくて"特定"か??

282 :デフォルトの名無しさん:2005/03/31(木) 17:45:44
そうでう、特定でした!
ありがとう!

283 :デフォルトの名無しさん:皇紀2665/04/01(金) 10:12:59
複数のコントロールのプロパティを一度に変更するにはどうすればいいのでしょうか?

284 :デフォルトの名無しさん:皇紀2665/04/01(金) 10:33:00
>>283
コントロールのオブジェクト名を「固定名&連番」にして
For〜NextとControls()を使って処理。

あとはヘルプ参照。

285 :デフォルトの名無しさん:皇紀2665/04/01(金) 11:14:50
with では無理ですかね?

286 :デフォルトの名無しさん:皇紀2665/04/01(金) 11:22:25
「コントロールの複数のプロパティ」ならwithだけど
「複数のコントロールのプロパティ」なら>>284だな

287 :デフォルトの名無しさん:皇紀2665/04/01(金) 11:29:39
>>284さん
>>286さん
ありがとうございます。

288 :デフォルトの名無しさん :2005/04/06(水) 23:50:47
質問です。
エクセルでキー入力してDBからデータを取ってきて表示させたいんすけど、
2つのテーブルの値を交互に表示するにはどの様にすればよろしいですか?
エクセル2000です。よろしくお願いします




289 :デフォルトの名無しさん:2005/04/07(木) 03:15:16
マクロを実行して
Sheets("Pos").Visible = True
の行までくると
「実行時エラー'1004':
Worksheet クラスの Visible プロパティを設定できません。」
のメッセージが表示されます。Excel2000です。
どうしたら良いのでしょうか。


290 :289:2005/04/07(木) 04:16:58
[オートコンプリートを使用する] チェック ボックスはオフに設定しています。

291 :デフォルトの名無しさん:2005/04/07(木) 20:23:04
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&c2coff=1&q=%8E%C0%8Ds%8E%9E%83G%83%89%81%5B+1004+Worksheet+%83N%83%89%83X&btnG=Google+%8C%9F%8D%F5&lr=lang_ja

292 :デフォルトの名無しさん:2005/04/12(火) 12:15:54
>>276
Exactly! フォロー感謝します。
当然のことながら逆のこと(VBAコードを書いてマクロとして実行させる)はできますし、「マクロとは何か」なんてことは知っています。
業務上、急ぎでそれをする必要があったので、詳しく説明できなかったのが悪かったと思います。

自分個人なら「マクロオブジェクトをプログラムから作る」必然性はないのですが、業務上、「デザインビューで、何が行われているのか視覚的にわかる必要がある=マクロオブジェクト」を作らなければならないのです。
内容は、「連番のついたクエリを順に実行する」というマクロで、手作業でマクロオブジェクトをデザインビューで作ると、けっこう面倒です。
(「クエリを開く」→クエリ01,02,…を繰り返すことになる)。VBAコードで、コピペできれば楽ですが・・・

ご存知の方も多いでしょうが、業界、理にかなわないものを作れという仕様もけっこうあるので。
今回の場合は「動作を視覚的にわかりやすく見たい」という要求のもとでやってます。
(ようするに利用者がvbaコードを読めないか、読む手間を省きたいらしい)

293 :デフォルトの名無しさん:2005/04/12(火) 12:32:54
禿しくワロタ

294 :デフォルトの名無しさん:2005/04/12(火) 15:50:33
テキストエリアを持つシェイプがグループ化されているとき、
Shapes("hoge").GroupItems(添字).TextFrame.Characters.Text
の値を取得できても、変更できません。
グループ化を解除せずに、変更する方法はありませんか?

295 :デフォルトの名無しさん:2005/04/13(水) 00:14:05
Excel2003でコントロールボタンを配置し、それを押すとフォームが出て
フォーム中のキャンセルを押すとフォームが消えるって作ったのですが

コントロールボタンを押した時のコードで
UserForm.Show
ってやるだけで表示されてしまいます
しかし、キャンセルを押された時には
Unload UserForm
としているので、コントロールを押された時は
Load UserForm
UserForm.Show
とすべきなのでしょうか?
それともShowメソッドが呼ばれた時点でメモリにロードされていなければロードする
なんて内部処理があるのでしょうか?
それとも考えが間違っているのでしょうか?


296 :デフォルトの名無しさん:2005/04/13(水) 05:19:08
> それともShowメソッドが呼ばれた時点でメモリにロードされていなければロードする
> なんて内部処理があるのでしょうか?
あります。

297 :デフォルトの名無しさん:2005/04/13(水) 15:29:04
じゃあ教えてやれよ。

298 :デフォルトの名無しさん:2005/04/13(水) 20:41:12
何を?


299 :デフォルトの名無しさん:2005/04/13(水) 20:51:26
この場合は「あります。」のみの回答でじゅうぶんだと思うんだが。

300 :デフォルトの名無しさん:2005/04/13(水) 20:57:14
おいらもCreateとかしないので、
どのタイミングでフォームが作られるのかわからなかったんだけど
本読んだらUserForm.Showでもいいし
UserForm.Label1.Caption="あああ"でもいいけど
最初に使おうとしたときに勝手に作ってくれるらしい。

301 :デフォルトの名無しさん:2005/04/14(木) 10:15:26

VBAに限ったことじゃないけど、よく使われる変数名ってあるじゃないですか。
i〜nはFORTRANの名残で整数型によく使われたり
hoge、hugaなんかは特に意味のないものとして使われたり。
そういうのが多く紹介されてるサイトって無いですかね?
又は、詳しい方が居るならここに羅列していただければありがたいのですが。

302 :デフォルトの名無しさん:2005/04/14(木) 15:02:49
エクセル2000、2002にて
エクセル本体やブックの KeyDown イベントを拾う方法はあるのでしょうか?

只今、アドインを作成しています。
このアドインはキーボードで操作するもので、
受け付けるキー入力として Esc キー押下があります。
但し、アドイン毎にその動作は異なります。
(続く)


303 :302:2005/04/14(木) 15:04:10
Esc を押された時に各アドインでは
リセット処理を走らせたいのですが、
Application.OnKey を使うと、
1つのキーに1つのルーチンしか割り当てられません。

割り当て先のルーチンで各アドインの処理を
直接呼ぶことも出来ますが、これではアドインを追加するたびに
OnKey で呼ばれるルーチンに手を入れる必要があります。

そこで、各アドイン側で WithEvents 宣言したオブジェクトを経由して
KeyDown イベントを受け取れないものかと考えていますが
うまくいきません。
(続く)


304 :302:2005/04/14(木) 15:04:43
現在は仕方なく、OnKey で呼ばれるルーチンを含む
アドイン(KeyHookアドイン)を別個に1つ作成し
各アドインは KeyHook に自分のイベントハンドラとなる
Public プロシージャを登録し、
キー押下時に KeyHook から Application.Run で
各アドインのイベントハンドラを順に呼び出そうと
しています。
ですが、どちらにしても他人が作ったアドインと OnKey の
取り合いになることも避けたいので
OnKey 以外でキー押下を検出する方法を
探しております。

どなたかお知恵を拝借できましたら幸いです。
またスレ違いでしたら失礼しました。
もし、適切なスレがありましたら
恐れ入りますが誘導してください。


305 :302:2005/04/14(木) 15:15:09
すみません。何のアドインだか書いていませんでした。
エクセルのアドインです。


306 :デフォルトの名無しさん:2005/04/14(木) 17:18:17
たまにお世話になっております。今回初投稿します。

ACCESS2000&WinXPにて、APを作成しています。

APの内容は
ユーザー側画面にて、予約を行いリアルタイムで
事務所側画面に結果を反映させようとしています。
DBは事務所側のサーバに置いてあります。

この時、急にユーザー側画面のレスポンスが悪くなることで困っています。

ユーザー側画面ではなにもロジックを入れておらず、
入っているロジックは数分に一度のDB更新処理のみです。

レコードロック?とも思いましたが、レコードへのアクセスは数分に一度ですので、
関係ないのではと思います。

MDBも分割しております。

レスポンスが悪くなる理由として、
レコードロック以外に考えられるものはありますか?

307 :デフォルトの名無しさん:2005/04/15(金) 11:18:40
>>302
ぱっと思いつくのは SetWindowsHookEx(WH_KEYBOARD, 〜) なんだけど
VBAでやると PC 激重になると思うし、アドイン作ったこと無いから
実際出来るかビミョ

>>306
どのコードで、遅くなるの?
まずは、その部分の、解析汁!

308 :302:2005/04/15(金) 15:33:27
>>307
レスありがとうです。
最終的にはそれしかないかな、と思っているのですが
その前に実は API 使わずいけるのでは!?と思い書き込ませていただきました。
ひとまず、>>304 の KeyHook アドインで何とかなりましたが
やっぱり他のアドインとの OnKey 取り合いは避けられないし
API でフックするしかないかなぁ…。
API フックは昔、一度やっただけなので思い出しながら作ってみて
できたら体感速度とかレポします。


309 :デフォルトの名無しさん:2005/04/15(金) 18:03:04
Application.ScreenUpdatingをfalseにしたいのですが
変更できません、イミディエイトウィンドウから

Application.ScreenUpdating=False
のように打ち込んだ直後に
print Application.ScreenUpdating
True
となります。
プログラム文中にかいても同じですが、何故変更できないのでしょうか?

新規にブックを開いてこういう状態です。

310 :デフォルトの名無しさん:2005/04/15(金) 18:33:06
エクセルの分析ツールにあるワークシート関数ERFをVBAのマクロで使う方法はありますか?


311 :デフォルトの名無しさん:2005/04/15(金) 21:03:22
>>309
Sub Hoge()
  Application.ScreenUpdating = False
  Debug.Print Application.ScreenUpdating
End Sub
これで、実行しても True って表示されるの?
ちなみに、 ScreenUpdating は VBA 実行中じゃないと False に設定出来ません。
(というか、Excel が True に戻す)

312 :デフォルトの名無しさん:2005/04/16(土) 01:33:50
教えてください。
文章末尾に到達したことを知るにはどうすればいいのでしょう?

ワードでマクロを使って文章内の特定の単語に色をつけています。
とりあえず、単語ごとに50000回くるくる回しているのですが、
時間がかかってしまいます。
文章末尾に到達したことがわかれば、そのループを終えて、次のループに
移ることができると思うのです。



313 :デフォルトの名無しさん:2005/04/18(月) 12:07:24 ?###
>>312
For Eachで回せばいいんじゃない?

314 :デフォルトの名無しさん:2005/04/18(月) 18:14:27
VBAでIEの制御をこころみているんですが、HTML本文全体を取得するには、
どうしたらいいのでしょうか?

CreateObjectで取得したオブジェクトが変数IEに入っているとして、メソッド
navigateでページを表示できた状態で、そのページ全体のHTML文を取得する
どうすればいいのですか。
多分、
IE.Document.body
の後ろに適当なプロパティを指定すればよさそうにおもうのですが、それがわかりません。

フォームのタグ類の制御はできているのに、こんな簡単そうなことでもう数時間
はまってますorz

また、IEのオブジェクトの階層構造、メソッド、プロパティを分かりやすくまとめた
サイトがあったら教えて下さい。MSDNは見たけど、必要な情報にたどり着けません
でした。


315 :デフォルトの名無しさん:2005/04/18(月) 19:00:17 ?###
Sub test()

Const URL = "http://www.yahoo.co.jp/" 'ここに取得したいHPを記入
Dim objHTTP As Object, sHTTP As String

Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Call objHTTP.Open("GET", URL, False)
objHTTP.Send

sHTTP = objHTTP.ResponseText
Debug.Print sHTTP

End Sub

「VB MSXML」で調べると分かりやすかも・・・

316 :デフォルトの名無しさん:2005/04/18(月) 20:50:29
Word(2000) VBAでファイルのプロパティってどのように変更するのでしょうか?
キーボードマクロでは記録されなくて・・・
よろしくお願いします。


317 :314:2005/04/18(月) 21:35:46
>>315
早速のご丁寧なご教示ありがとうございます。

これはHTML(XML)を本格的にパースする用途に使うと便利そうですが、私の場合、VBA
でフォームに自動で応答するために、たとえば単に、

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "http://hogehogehoge.co.jp"
Set input_list = objIE.document.all.tags("input")
For Each i In input_list
If i.Name = "cd" Then
i.Value = code
End If
If i.Name = "btn1" Then
i.Click
Exit For
End If
Next

なんてことをしているだけでして、その過程で、単にタグデータではない普通のテキスト
部分を読みたいだけなのですが、上記のようなオブジェクト(objIE)を使ってテキスト
部分を簡単に読むにはどうしたらよいのでしょうか?

318 :314:2005/04/18(月) 22:21:31
自力解決しました。

objIE.document.body.innerHTML

でHTMLを取得できました。
315さんはじめ、皆さん、お騒がせしました。

319 :302:2005/04/21(木) 14:08:52
>>307 さん、レスありがとうでした。
しかし SetWindowsHookEx() の件は、
自分が勝手に勘違いしている部分があったようで
実際には使えなさげな気がしてきました。
(フックしても、それをアドイン側へ通知する手段が無い?)

う〜ん…何とか OnKey 以外の方法
(他所のアドインとキーを取り合わない方法)
でキー押下を検知する方法はないかなぁ…。


320 :デフォルトの名無しさん:2005/04/21(木) 16:53:07
すみませんが教えてください。

行方向に例えば、A1〜A100まで連番をつけ、
A100まで到達したら、B1に移り、B100まで連番を振る、
この場合はA100の値とB1の値は+1の増加です。

といった記述式が思い浮かびません。
どうしたらよいのでしょうか?

321 :デフォルトの名無しさん:2005/04/21(木) 17:26:33
>>320
Dim i As Byte, j As Long, n As Long
Application.ScreenUpdating = False
n = 1 '開始番号
For i = 1 To 2
 For j = 1 To 100
  Cells(j, i).Value = n
  n = n + 1
 Next j
Next i
Application.ScreenUpdating = True

322 :デフォルトの名無しさん:2005/04/21(木) 17:34:20
>>320>>321 程度のことが思い浮かばんということなのだろうか?

ちなみにこうや
For i = 1 To 2
    For j = 1 To 100
        Cells(j, i) = j + 100 * (i - 1)
    Next
Next

こうもできる
For i = 1 To 200
    Cells(((i - 1) Mod 100) + 1, (i - 1) \ 100 + 1) = i
Next

数式というなら =ROW()+(COLUMN()-1)*100

323 :デフォルトの名無しさん:2005/04/21(木) 17:37:08
>>322
連番というだけで、開始番号が1だとは言ってないことに気づけ。
まあ、どんな値でもその式に当てはめられるけどそこまでするメリットはほとんど無い。

324 :デフォルトの名無しさん:2005/04/21(木) 17:41:39
かなり邪道だが、For Eachを使う方法もあるな。

325 :デフォルトの名無しさん:2005/04/21(木) 18:06:19
みんな質問に答えてくださってありがとう。
これで長年の疑問が解けました。

326 :デフォルトの名無しさん:2005/04/21(木) 18:11:57 ?###
Dim x As Range, y As Range, i As Long
Set y = Range("A1:B100")
i = 1 '初期値

For Each x In y
If x.Column = 1 Then
x.Value = i
i = i + 1
ElseIf x.Column = 2 Then
x.Value = x.Offset(, -1).Value + 100
End If
Next

For Eachだとこんな感じかな?開始から終了までの行数を
加えればいいので、もっと一般化できますね・・・

327 :デフォルトの名無しさん:2005/04/21(木) 18:17:43
>>320
すみませんアンカー抜けて、しかも半角シフト
全て詰められてしまいました…一応再度報告、、、

Dim x As Range, y As Range, i As Long
Set y = Range("A1:B100")
i = 1 '初期値

For Each x In y
  If x.Column = 1 Then
    x.Value = i
    i = i + 1
  ElseIf x.Column = 2 Then
    x.Value = x.Offset(, -1).Value + 100
  End If
Next

328 :320:2005/04/21(木) 18:24:29
ちなみに、下記のように書いた場合、

Dim i As Integer
Dim j As Integer
Dim n As Integer

n = 1
For i = 1 To 10
For j = 1 To 10

Cells(i, j).Value = n
n = n + 1
Next
Next

行方向に1ずつ増加せずに、列方向に1ずつ増加してしまったのです・・・
どこがいけなかったのでしょうか?

329 :デフォルトの名無しさん:2005/04/21(木) 18:31:37
>>327
Dim x As Range, i As Long
i = 1 '初期値

For Each x In Range(Cells(1, 1), Cells(2, 100))
 Cells(x.Column, x.Row).Value = i
 i = i + 1
Next x

範囲と行・列の両方を反転させればいいだけ。
これもx.Columnとx.Rowを計算に掛ければ変数 i は無しでも行ける。
範囲を数値指定ではなく文字指定にすると反転させるのが面倒かもしれないけど
Cellsで始点と終点を指定する方法なら反転も簡単。
指定範囲と作業範囲が異なるという邪道な方法ではあるけど、それが理解できてれば問題ないし。

>>328
Cellsの i と j が逆。

330 :320:2005/04/21(木) 18:40:10
>>329

レスありがとうございます。
For を2回使ったばあいには、最後のForから処理が始まるってことですかね・・・

331 :デフォルトの名無しさん:2005/04/21(木) 18:42:08 ?###
>>329
凄い綺麗な形にまとまるんですね。
やっぱり知識よりも、こういう知恵というか発想力が
凄い人は素直に尊敬します。

332 :デフォルトの名無しさん:2005/04/21(木) 19:38:50
>>331はすげー嫌みなのかただの馬鹿なのか?


333 :デフォルトの名無しさん:2005/04/21(木) 19:48:30
少なくとも>332がただの馬鹿なのは間違いなさそうだ

334 :デフォルトの名無しさん:2005/04/21(木) 19:50:03
>>332
いや別に嫌みじゃないんじゃない?

ところでFor Eachの使い方がよく分からん・・・

335 :デフォルトの名無しさん:2005/04/21(木) 20:11:35
>>324
For Eachの方が若干高速だし、邪道何て事はないよ。むしろ本筋のような?

>>329
は面白いけど行数多いと困るね。

正統に書けば下記のような感じ。範囲について応用効くし。

i = 1 '初期値
objRange = Array(Range("a1:a100"), Range("b1:b100"))

For Each y In objRange
For Each x In y
x.Value = i
i = i + 1
Next x
Next y


336 :デフォルトの名無しさん:2005/04/21(木) 20:32:33
>>327
おまけ

i = 1 '初期値
Set objRange = Range("a1:a100")

For Each x In objRange
 x.Value = i
 x.Offset(, 1).Value = i + objRange.Count
  i = i + 1
Next


337 :デフォルトの名無しさん:2005/04/21(木) 23:13:34
>>329は無駄な化粧した勘違いブス
>>333は騙された馬鹿

338 :デフォルトの名無しさん:2005/04/21(木) 23:43:10
VBAが理解できると、VBも理解できるようになると言われますが
実際のところどうでしょう?
やはり楽に以降できましたか?

339 :デフォルトの名無しさん:2005/04/22(金) 07:45:13
>>337
さあ、早くマクロを自動記録する作業に戻るんだ。

340 :デフォルトの名無しさん:2005/04/22(金) 10:36:55
>>335
は面白いけど列数多いと困るね。
正統な方法でもないし。

341 :デフォルトの名無しさん:2005/04/22(金) 18:00:48
>>340
そろそろファイナルアンサー頼む

342 :デフォルトの名無しさん:2005/04/22(金) 19:05:04
質問させてください。

Excelについてなのですが、今
「Workbook_BeforeClose」に「Thisworkbook.saved=True」「Application.DisplayAlerts」
と記述しています。

それで「×」ボタンをクリックしたら強制的にブックを閉じるようにしたいのですが
ブック上にコントロール(たとえばチェックボックス)を配置してそれをいじると
なぜか「×」をクリックしたときに変更内容を保存しますかというメッセージがでます。
どうやったらこれをでなくできるでしょうか。


343 :デフォルトの名無しさん:2005/04/22(金) 19:05:56
すみません。「Application.DisplayAlerts=false」のまちがいです

344 :デフォルトの名無しさん:2005/04/22(金) 19:44:36
>>340
それもそうだな。For Eachにとらわれたのは失敗だった。
普通に書くならループ不要の.DataSeriesが明らかに高速だった。
For Each使うなら.columns使えば良いが蛇足だな。


345 :デフォルトの名無しさん:2005/04/23(土) 15:17:56
EXCEL以外のWORDやPOWERPOINTやVISIOのVBAの本でいいのない?
ていうかほとんど全くないの?


346 :デフォルトの名無しさん:2005/04/23(土) 19:52:48
http://www.seshop.com/detail.asp?pid=640

347 :デフォルトの名無しさん:2005/04/23(土) 20:24:28
>>346サンキュ
それすごく欲しいけど品切れで無念・・・

348 :デフォルトの名無しさん:2005/04/23(土) 23:32:10
すいません、VBScriptでユーザーのキー入力をフックしたいんですが
そういうことは出来ますでしょうか?

スレ違いすいません・・・VBScriptのスレがないんです・・・

349 :デフォルトの名無しさん:2005/04/24(日) 00:10:21
>>342
うーん、うちのExcel2002ではチェックボックス触って×で閉じても
確認ダイアログ出なかったけど。。

350 :デフォルトの名無しさん:2005/04/24(日) 10:10:18
>>348
お前ら、wsh使ってますか? Part4
http://pc8.2ch.net/test/read.cgi/win/1100489339/

WSH(・∀・)スレッド!
http://pc8.2ch.net/test/read.cgi/tech/1055075469/



351 :デフォルトの名無しさん:2005/04/24(日) 11:24:23
>>350
あぁ!WSHか!ありがとうございました

352 :デフォルトの名無しさん:2005/04/24(日) 22:18:12
すみません。
ExcelVBAで作ったグラフをPowerPointにそのまま吐き出すことはできるんでしょうか?
吐き出す、というか、VBAでグラフをExcelからPowerPointにコピー&ペースト?になるのかな。

ぐぐってみたんですが、キーワードが悪いのか参考になるサイトが見当たりませんでした。
ヒントや、参考になるサイトがあったら教えてください。

353 :デフォルトの名無しさん:2005/04/25(月) 01:16:26
ひとつのセルに

2004/04

が入っていて、これを

2004
04

に分けてダイアログのテキストボックス2箇所に振り分けたいのですが、
テキストボックス2箇所に振り分ける方法が分かりません。
助けてください。

354 :デフォルトの名無しさん:2005/04/25(月) 01:53:58
>>353
Dim i As Integer
Dim A As String, B As String

Const C = "2004/04"
i = InStr(C, "/")
A = Mid(C, 1, i - 1)
B = Mid(C, i + 1)

355 :デフォルトの名無しさん:2005/04/25(月) 02:40:02
>>354 さん
いやはやたったこれだけの行数が理解できてないっす。
1週間程度の知識なのでまだまだっす。
教えていただいた情報を元に勉強してくるっす。
ありがとうございました。

356 :デフォルトの名無しさん:2005/04/25(月) 05:49:32
>>355

>>354のはAとBに分割した値が入るけど

Dim A As Variant
A = Split("2004/04", "/")

とすればA(0)とA(1)に分割した値が入る
単純分割ならこっちがオススメ

357 :デフォルトの名無しさん:2005/04/25(月) 10:58:53
Split関数が使えるのはExcel2000以上。そこんとこ注意

358 :デフォルトの名無しさん:2005/04/25(月) 11:30:19
まあ、Splitが使える環境なら迷うまでもなくSplitを使うべき操作だけどね。

359 :デフォルトの名無しさん:2005/04/25(月) 15:36:52
マクロでwordの文書上の右クリックメニューに新しくメニューを追加する方法を教えてください。
よろしくお願いします。

360 :デフォルトの名無しさん:2005/04/26(火) 01:27:26
>>356 さん
自分のファイルで思い描いた動作をしてくれましたよーっ
助かりました。
ありがとうございました。
ただ、>>357 さんが言っていることを他のサイトでも読んだので、
>>354 さんのも使えるように勉強するとです。
自分の行っている会社も97、2000、XP、2003とバラバラにあるので、
対応できるようにしたいと思います。がんばる。

361 :デフォルトの名無しさん:2005/04/27(水) 08:14:23
ユーザーフォームを×ボタンで閉じた時に、エクセル自体を終了する方法はありますか?

362 :デフォルトの名無しさん:2005/04/27(水) 08:27:27
あります

363 :デフォルトの名無しさん:2005/04/27(水) 09:46:02
>>360
参考までに

Excel2000Split関数の代替
http://www2.moug.net/cgi-bin/technic.cgi?exvba+TI10010010



364 :デフォルトの名無しさん:2005/04/27(水) 15:20:51
IE上でExcel開いた時に動かない命令って何ですか?

Display.AlartとQuitはMSNで確認しました。

教えてくださいませ

365 :とうしろ:2005/04/27(水) 17:24:22
どなたか助けてください。
たとえば
種類種類コード個数
りんご120
ばなな330
メロン25
イチゴ250
すいか13
というシートから
コード別に他のシートに移すマクロを
組みたいんですが、filter関数を使えばいいという
ことはわかったんですが、そのあとどうしたらいいのか
よくわかりません。
どんなコードを書いたらいいのでしょうか?
vba使ったことないのに先輩にいきなりいわれて困り経ててます。
どうかおねがいします

366 :とうしろ:2005/04/27(水) 17:32:38
すみません 表がずれました。
種類  種類コード   個数
りんご 1        20
ばなな 3        30
メロン 2        5
イチゴ 2        50
すいか 1        3

使用しているのはexcel2000です。おねがいします。

367 :デフォルトの名無しさん:2005/04/27(水) 18:04:12
>>365
Filterなんて使わなくても
For i = 2 To Cells(65536, 2).End(xlUp).Row
とかで、
Worksheets("種類コード" & Cells(i, 2).Value)…
とか
Select Case Cells(i, 2).Value
Case 1:
End Select
とかで振り分ければいいだけでしょ。

というかVBAわからないなら、種類コードの列でソートするなり
オートフィルタ使うなりして手動でコピペしなよ。
ここはVBAが全くわからない人がコードをねだるスレじゃなくて
VBAを有る程度わかってる人がヒントを貰うスレだから。

368 :とうしろ:2005/04/27(水) 18:11:21
>>367
回答ありがとうございます。
ご指摘のとおりなんですが、この作業が毎日あって、実際にするのが
おばちゃんなんですよ。それで自動化するようにって指示でした。

369 :デフォルトの名無しさん:2005/04/27(水) 18:23:55
>>368
んじゃがんばれ

370 :デフォルトの名無しさん:2005/04/28(木) 01:37:01
>>363 さん
うおぉーっ、助かりますよーっ
ありがとうございます。
しっかり勉強するとです。

371 :デフォルトの名無しさん:2005/04/28(木) 02:04:11
>>313

ありがとうございます。
一からやらないとだめみたいです。


372 :デフォルトの名無しさん:2005/04/28(木) 05:19:32

VBAで16進数の扱いについて質問なんですが、

 MsgBox 255 = "&HFF"

 If "&HFF" = 255 Then

 Select Case "&HFF"
 Case 255
 End Select

とした場合、Select Caseでのみ"偽"となります。
試しに
 Dim FF As Variant
 FF = "FF"
として「"&HFF"」を「"&H" & FF」に置き換えると
Select Caseでも"真"に成りますが、変数の型がStringだとやはり"偽"です。
MsgBoxとIfでは変数の型がVariantでもStringでも"真"に成ります。
ちなみに「Case 255」→「Case Is = 255」でも真偽の結果は変わりません。

またまた試しに
 Select Case 255
 Case "&HFF"
 End Select
としてみると何故か"真"になります。

もちろんSelect Caseの条件に、Byte型変数に一度格納した"&HFF"を当てたり
ValやCByte等で変換した物を当てたりすれば"真"が返りますが、
"&HFF"という文字列と255という数値が一致するかという同じ条件の時に
何故Select Caseだけ真偽の結果が違うのでしょうか?
また、何故条件と分岐結果を入れ替えると真偽が変わるのでしょうか?
詳しい方、理由を教えてください。

373 :デフォルトの名無しさん:2005/04/29(金) 12:27:16
excelブックAからBにマクロを移したいのですが、
標準モジュールのリストを取得するにはどうすればよいですか。

374 :デフォルトの名無しさん:2005/04/29(金) 17:34:55
VBエディタの画面からファイルのエクスポート→ファイルのインポート 
そういう話ではない?

375 :デフォルトの名無しさん:2005/04/30(土) 14:23:51
VBAって勉強しておくと、転職の際有利でしょうか?
25歳、事務員です。

376 :デフォルトの名無しさん:2005/04/30(土) 14:34:10
有利になることはある。
不利になることはない。

ただ、有利にならない場合もあるし
どのくらい有利かは時と場合と職種と運による。

まあ、VBA使える奴なんて腐るほど居るし、
勘のいい奴なら数日で簡単なものは書けるようになっちゃうからね。
「Excel使えます」=「VBA使えます」みたいなものだし。
VBA覚えたからと言って、あまり期待しない方がいい。

377 :デフォルトの名無しさん:2005/04/30(土) 15:20:52
検索結果を全てリストボックスに表示する方法を教えてください。
1行しか表示できない…

378 :デフォルトの名無しさん:2005/04/30(土) 15:24:59
>>377
どういう検索の仕方をしてるのかわからないと何にも言えない。
とりあえず検索結果1件をリストボックスに表示するコードを
ここに貼って見ろ。修正してやるから。

379 :デフォルトの名無しさん:2005/04/30(土) 15:32:46
>「Excel使えます」=「VBA使えます」みたいなものだし。
Excel VBAは使えるがExcel関数は素人。
俺はExcelが使えるとはおこがましくて言えない。


380 :デフォルトの名無しさん:2005/05/01(日) 02:59:29
>>378
何とか自分でできました。
でも、ありがとう。心強かったよ。

381 :デフォルトの名無しさん:2005/05/12(木) 22:18:52
「1000μSec」というような文字列を、数字と単位で分けたいのですが、どうしたらよいですか?

382 :デフォルトの名無しさん:2005/05/12(木) 22:52:12
>>381
Sub Macro1()
Const 文字列 = "1000μSec"
Dim 数字, 単位
  数字 = Val(文字列)
  単位 = Mid(文字列, Len(数字) + 1)
  MsgBox "数字は「" & 数字 & "」 単位は「" & 単位 & "」"
End Sub

383 :デフォルトの名無しさん:2005/05/14(土) 20:33:11
今まで一つのモジュール内にすべてマクロを記述していたのですが、
プログラムが大きくなってきたので、下記のようにモジュール別に分けたいのですが、
実行すると、call文の直後「コンパイルエラー: SubまたはFunctionが定義されていません。」
が出てしまいます。

モジュールを分ける時にはどういうルールがあるのでしょうか?
今はただ「挿入」から「標準モジュール」を選んだだけです。

[Module1]
Sub M1()
call M2
:
End Sub

[Module2]
Public Sub M2()
:
End Sub

384 :デフォルトの名無しさん:2005/05/14(土) 21:18:33
>>383
エクセルのバージョンは?

俺は前の会社でexcel97で作ったときは
[Module2].〜として実行したけど、
他社でexcel2000で作ったときはそういうことせずに
単に
call 〜 でしてた。

それ以上のことは俺にも判らない。

385 :デフォルトの名無しさん:2005/05/14(土) 21:43:46
>>384
バージョンは2002です。
単にcallでOKとのことで今もう一度確認したら、
Module1で宣言した変数を参照しようとしたことでエラーになって
たようです。見落としてました・・・。

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

386 :デフォルトの名無しさん:2005/05/20(金) 17:56:45
Access2000のVBAでTYPEステートメントを使ったのですが
TYPEステートメントってネストする場合、同一名称の変数名って使えない
のでしょうか?

例)
Type aho
aaa As String
bbb As String
ccc As String
zzz As String
End Type

Type hogehoge
mogemoge As aho
zzz As String <---同一名だけど構造体のメンバとしては違う変数になると思うのだけど。
End Type

誰か教えて下さい。


387 :デフォルトの名無しさん:2005/05/20(金) 18:15:36
すんまそん。
逝けますた。

388 :デフォルトの名無しさん:2005/05/23(月) 14:43:29
一定時間毎にマクロを自動的に実行する処理をしたいのですが、
SetTimerを使用すればできるようなことを聞いたのですが、具体的な記述の仕方が分かりません。

どなたかSetTimerの設定方法をご存知ないですか?

389 :デフォルトの名無しさん:2005/05/23(月) 18:57:29
>>388

つ http://www.google.co.jp/

390 :デフォルトの名無しさん:2005/05/23(月) 20:42:37
Excelマクロについて質問なのですが、
1つのWorkbook内に別ファイルの関数ライブラリを参照できるのでしょうか?
WorkbookObjectにコードを書き込み、
そこから別ファイルの共通関数ライブラリを参照したいのですが。

つまり複数のxlsファイルから、共通の外部プログラムを参照したいのです。

391 :デフォルトの名無しさん:2005/05/24(火) 13:52:53
xxx.xlsというファイル名を変数として保管して、後からそのファイルを
変数を使ってアクティヴにしたいのですが、
・変数宣言
・変数への格納
・呼び出し方
が分かりません。
当方、下記のようにしてみましたが・・・だめです。

dim filename as string

filename = activebook.filename

window(filename).activate
初心者質問で申し訳ありませんが、
アドバイスの程、宜しくお願いします。

392 :デフォルトの名無しさん:2005/05/24(火) 17:47:21
>>391
Dim filename As String
filename = ActiveWorkbook.Name
Workbooks(filename).Activate

こんな感じ。

393 :391:2005/05/26(木) 13:50:25
>>392
ありがとうございました。早速試してみます。


394 :デフォルトの名無しさん:2005/05/26(木) 21:38:53
質問です。

UserForm上に直線を配置するにはどうすれば良いでしょうか?

教えて下さい。よろしくお願い致します。

395 :デフォルトの名無しさん:2005/05/26(木) 22:02:55
>>394
直線の画像を入れる

396 :デフォルトの名無しさん:2005/05/27(金) 05:48:29
今選択されているシートを読み込むにはどうすればいいのでしょうか?
具体的には、
・・・
ActiveChart.SetSourceData Source:=Sheets("ぬるぽ").Range("P1:P652"),・・・
このぬるぽってところを今開いているシートにしたいです。
今まではファイルが変わるたびにエディタを開いてぬるぽのところを変えていました。
説明下手ですいません。教えてください。

397 :デフォルトの名無しさん:2005/05/27(金) 06:38:14
> 今まではファイルが変わるたびにエディタを開いてぬるぽのところを変えていました。
禿しくワロタ
そんあことしてる奴も居るのかw

398 :デフォルトの名無しさん:2005/05/27(金) 10:08:59
>>396
ActiveSheetプロパティとかSheetsクラスとか

399 :デフォルトの名無しさん:2005/05/27(金) 18:17:39
accessで、ロジックでテーブルのリンクをしたいのだが、どうやってするか教えてください

400 :デフォルトの名無しさん:2005/05/27(金) 21:27:04
このスレにはそぐわないかもしれないけど、質問です。
エクセルVBAで伝票発行(連続帳票)のマクロ作ってるんですが、印刷の段階でつまずいてます。
用紙サイズが特殊で、ページ設定の規定のリストに無く、ユーザー定義項目も無いプリンタなんですが、
うまい方法ないですか?

ちなみにVBA始めて5日のド素人です。
よろしくお願いしまっす

401 :デフォルトの名無しさん:2005/05/27(金) 21:42:57
ヘルプ読め

402 :デフォルトの名無しさん:2005/05/28(土) 10:30:38
>>400
http://www.microsoft.com/japan/msdn/officedev/officexp/odc_acc10_printers.asp
この辺を駆使することになるんじゃねーの?

403 :デフォルトの名無しさん:2005/05/28(土) 15:19:05
1つ質問させて下さい。
下記のようにセルの中に数字が入っているとします。

1行 きんたま
2行 きんたま
3行 きたんま
4行 たんきま
5行 たんきま
6行 たんきま
7行 たんきま
8行 たんきま
9行 まきんた

これを1行目にカーソルを重ねた状態で、
下記のように同じ値のセルを結合させるマクロを考えております。

1行 
2行 きんたま
3行
   −−−−
4行 
5行 
6行 たんきま
7行 
8行 
   −−−−
9行 まきんた

教えて君で申し訳ないですが、どなたかお願いします。

404 :デフォルトの名無しさん:2005/05/28(土) 20:27:41
>>403
Forで上から読んでいって
Ifで上下が同じか判断させて
上下が違う位置の一つ前までを結合、その位置を変数に格納
また同じようにifで判断させて前回変数に入れた行から
上下が違う位置の一つ前までを結合。の繰り返し
あとはヘルプでも読め。

405 :デフォルトの名無しさん:2005/05/28(土) 23:03:29
はじめまして。仕事の関係でExcelVBAを使うことになり、勉強をはじめました。
プログラムは全くはじめてなので、とりあえず簡単なプログラムから組んでみました。
ボタンをクリックすると、1〜50まで増えていくというものです。

Private Sub

j = 1

For ii = 1 To 10
For i = 1 To 5

Cells(ii, i) = j
j = j + 1
Next
Next
End Sub

こらをさらに、偶数と奇数に分けたいのですが、どうやればいいのか分からないです。
・もう一つボタンを作り、クリックすると奇数と偶数で上下or左右にわかれる。
考えとしては、cells(ii,i)が2で割り切れるかどうか判定して、割り切れれば偶数、
そうでなければ奇数というやり方だと思うんですが、よろしかったら誰か教えてください。
長文失礼しました。

406 :デフォルトの名無しさん:2005/05/28(土) 23:39:15
>>405
Mod 演算子を使用します。詳しくはヘルプを。

407 :デフォルトの名無しさん:2005/05/29(日) 04:30:10
始めまして、SetLayeredWindowAttributes関数について質問させてください
指定色を透明化、またはウィンドウ全体を透明化する物だと思いますが

SetLayeredWindowAttributes MyhWnd, RGB(0, 0, 0), 0, LWA_COLORKEY

このように使って黒を透明化できるのですが
複数色を透明化、指定色以外を全て透明化などできないでしょうか?

408 :デフォルトの名無しさん:2005/05/29(日) 06:21:56
できません

409 :デフォルトの名無しさん:2005/05/29(日) 19:44:42
条件付書式設定で色のついたセルを取得する方法ってありますか?
取ろうとしても何もないのですが

410 :デフォルトの名無しさん:2005/05/29(日) 21:05:30
>>409
マクロの記録で条件付き書式の設定を取ってみるなり
ヘルプ読むなりお好きなように

411 :デフォルトの名無しさん:2005/05/29(日) 22:13:30
>>409
条件付き書式の設定は普通の方法じゃとれないよ。

過去ログにちょっと出てたと思うけど。

412 :デフォルトの名無しさん:2005/05/29(日) 23:25:27
>>411
m9(^Д^)プギャー

413 :デフォルトの名無しさん:2005/05/30(月) 12:55:19
>>399
adoxを使う。

http://www.microsoft.com/japan/msdn/columns/office/office10052000.asp

414 :デフォルトの名無しさん:2005/05/30(月) 14:39:26
誰かわかる方教えてください。

PowerPoint2003をVBから操作しています。
複数のファイルのスライドをInsertFromFileで1つのpresentationにまとめて
1つのスライドショーとして表示しているのですが、
スライドの内容のコピーは出来るけど、
スライドの背景やデザインテンプレートがコピー先に反映されません。
なんとかならないでしょうか。
手動でコピペなら貼付オプションで元の書式をそのまま使うとすると
上手く行きますが、VBAではそのような操作が出来るメソッドも見つからないし、
マクロ記録などしても、その辺りはコードが出来ないようです。
PowerPoint自体のデフォルト設定でもいいので、
上記の様なことが実現出来る方法はないでしょうか。


415 :デフォルトの名無しさん:2005/06/01(水) 20:02:10
VBAで食べていけますか?
MOUS Master持ってるのでVBAも使いこなしたいと思ってるんですが…。

416 :デフォルトの名無しさん:2005/06/01(水) 20:10:10
デキル人間はExcel1本で食っていける
ダメな人間はExcelを使いこなせても食うどころか収入にすら結べないだろう。

417 :デフォルトの名無しさん:2005/06/02(木) 12:08:05
今仕事でエクセルVBA使ってます。

VBAだけじゃ、やっぱり無理だと思うし、仕事の種類にもよると思う。
個人でやるのか、どこかに就職するのか。
VBAで作ったものをどこかに納品するのか、自分の仕事を効率よく行うために使うのか。
それによって全然違う。

ITに特化してないような会社なら、VBA使えると意外と重宝がられるかもね。

418 :デフォルトの名無しさん:2005/06/02(木) 13:02:00
VBA以外にも言えることだけど、言語の一つとして使えるぐらいならそれで十分
VBAが使いこなせればVB、Cの転向も楽
食うと言う意味でIT系は論外だと思うけどネ

419 :デフォルトの名無しさん:2005/06/03(金) 18:55:08
新規に挿入したシートにも、セルダブルクリックのイベントプロシジャを自動的につけたいのですが、
どのようなコードをどこに書けば良いのでしょうか?

420 :デフォルトの名無しさん:2005/06/03(金) 20:44:39
ハイパーリンクでsubadressに変数を設定するのはどうすればいいの?
文字列ならsubadress:="'○○'!A1"でできるけど…
ダブルクオテーションとったらビックリするぐらいエラーになってしもうた。

助けてっ!そこのエロい人

421 :デフォルトの名無しさん:2005/06/03(金) 23:19:57
>>419
Microsoft Visual Basic for Applications Extensibility 5.3を参照設定して、以下のコードでいかがでしょうか。Excel2000で試しました。標準モジュールに書きます。

Sub test()
Dim i, x
i = 0
Sheets.Add
For Each x In Application.VBE.ActiveVBProject.VBComponents
i = i + 1
Next
With Application.VBE.ActiveVBProject.VBComponents(i).CodeModule
.InsertLines 3, _
"Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
.InsertLines 4, _
"msgbox ""test"""
.InsertLines 5, _
"end sub"
End With
End Sub


422 :デフォルトの名無しさん:2005/06/04(土) 11:17:50
<big><b><red>SeriesCollectionのNameプロパティで系列名を取得するとなぜかエラーになってしまいます。</red></b></big>
具体的にはある系列名を検索して、存在したら削除するというソースを書こうとしています。
ソースは以下のように書いています。
With Workbooks("○○.xls").Worksheets("△△").ChartObjects("グラフ1").chart
For i = 1 To .SeriesCollection.Count
If .SeriesCollection(x).Name = "系列1" Then
.SeriesCollection(x).Delete
End If
Next i
End With
上記を実行すると、.SeriesCollection(x).Nameでエラーがおきます。
エラーは「SeriesクラスのNameプロパティを設定できません」です。
デバックすると、i = 2のときに落ちています。
そこで、MsgBoxを挿入して、以下のソースを実行しました。
With Workbooks("○○.xls").Worksheets("△△").ChartObjects("グラフ1").chart
MsgBox .SeriesCollection.Count
MsgBox .SeriesCollection(1).Name
MsgBox .SeriesCollection(2).Name
End With
上記を実行すると、
まず「2」が表示され、次に「系列1」が表示され、
その次で落ちます。

以上の原因がわかるかた教えてください。
わからなくて本当に困っています。
お願いします。


423 :デフォルトの名無しさん:2005/06/04(土) 14:37:49
>>422
グラフは使わんからよく知らんが
削除して減っんだから逆から回せばいいんじゃねーの?
For i = .SeriesCollection.Count To 1 Step -1
外してたらスマソ

424 :デフォルトの名無しさん:2005/06/05(日) 22:17:42
smallscrollを使って指定のセルへ移動することは可能でしょうか?
アクティブセルから右方向の指定したセルへ移動したいのです。

ちなみに現在は下記のように記述しています
ActiveWindow.SmallScroll ToRight:=142
Range("ET5:EW5").Select

上記だと当然のことながらすご〜く下の方で編集していても
5行目へ移動してしまうので非常に使い勝手が悪いんです。

どなたかご教授いただけると幸いです。よろしくお願いします。

425 :デフォルトの名無しさん:2005/06/05(日) 22:30:53
>>424
アクティブセルからオフセットじゃだめです?

426 :デフォルトの名無しさん:2005/06/05(日) 22:36:56
>>425
早々のレスありがとうございます。
なにぶん初心者のため、オフセットがよくわかってなんです。
申し訳ありませんがとりあえず教えていただくわけにはいき
ませんでしょうか?実際動かしてみないとなんとも言えない
んで・・・・・・
よろしくお願いします


427 :デフォルトの名無しさん:2005/06/05(日) 23:21:37
>>426
http://www.sanynet.ne.jp/~awa/excelvba/kouza/chapt_02/007.html

428 :デフォルトの名無しさん:2005/06/06(月) 00:40:33
>>427
ありがとうございます。うまく編集すれば使えそうな気がします。
ところでオフセットでセルを指定するときに一番右端のセルは
指定できると思うのですが、一番右端から7列目というような
指定方法はございませんでしょうか?
もしできればご教授いただけると幸いです。よろしくお願いいたします


429 :デフォルトの名無しさん:2005/06/06(月) 01:06:40
>>428
ヘルプ見れば出来るようになるよ。

430 :デフォルトの名無しさん:2005/06/06(月) 19:25:02
どうしてVBAってバグが多いんでしょう。
入力をすればするほど、本と同じに打っててもバグが出て困ってしまいます。
何に気をつけて入力すればいいですか。


431 :デフォルトの名無しさん:2005/06/06(月) 20:31:00
> 何に気をつけて入力すればいいですか。
タイプミス

432 :Excel2003:2005/06/06(月) 21:32:48
UBound()関数を使用して、
多次元配列の2次元目の要素数を取得したいのですが、
下記のように記述すると、1次元目の要素数しか取得できません。

Dim a_test(3, 3) As String
MsgBox UBound(a_test)

どう記述すればいいんでしょうか????



433 :デフォルトの名無しさん:2005/06/06(月) 22:15:27
>>432
UBound関数は1次元配列専用です。
その他、Join関数やFilter関数も一次元配列にしか使えないし、
ReDimステートメントでは多次元配列の最後の(一番右の)要素数しか変更出来ません。
これらはVBAで扱う配列の仕様なのでどうにもなりませんから、
Forステートメントでも使って求めるしかないですね。

434 :デフォルトの名無しさん:2005/06/06(月) 22:15:57
>>432
MsgBox UBound(a_test,2)

435 :デフォルトの名無しさん:2005/06/07(火) 11:24:24
EXCELのVBAで
現在のセル位置(A1とかB1とか)を取得する方法を教えてください。

436 :デフォルトの名無しさん:2005/06/07(火) 14:17:31
MsgBox ActiveCell.Address(0, 0) 'アクティブセル
MsgBox Selection.Address(0, 0) '選択範囲

437 :デフォルトの名無しさん:2005/06/07(火) 19:04:59
ユーザーフォームのコンボボックスのRowsourceに他のシートの値(範囲)を読ませるにはどう書けば良いでつか?


438 :デフォルトの名無しさん:2005/06/07(火) 19:30:10
>>436
ありがとうございます
マクロの記録を頼りにプログラムを組んでたのですが
どうしても出せなくて困ってました。

439 :デフォルトの名無しさん:2005/06/07(火) 19:31:44
>>437
ん〜こんなんじゃダメ?

Dim i As Long

i = 1
Me.ComboBox1.Clear
Do While (Sheet1.Cells(i, 1) <> "")
Me.ComboBox1.AddItem Sheet1.Cells(i, 1)
i = i + 1
Loop

440 :デフォルトの名無しさん:2005/06/07(火) 19:38:47
>>439
ありがとうございます。
.AddItemのあとに=とかつけてパニクってました。
感謝感激です。

441 :デフォルトの名無しさん:2005/06/07(火) 23:30:24
excel2000で
押されたコマンドボタン(セルにフィットしている)の位置を
たとえば"A1"などという形で取得するにはどうすればよいですか?

442 :デフォルトの名無しさん:2005/06/07(火) 23:34:41
>>441
オブジェクトの位置と、その前にあるセルのサイズ(幅、高さ)から計算すれば?


443 :デフォルトの名無しさん:2005/06/07(火) 23:43:20
>>442
すいません言葉が足りませんでした
私、実はexcel始めて3日目で、押されたオブジェクトの参照を
コード内でどのように手にするのかすら知りません・・・
(「ActiveSheet」みたいな感じのグローバル変数があるのでしょうか?)
それができればそいつからプロパティを引き出して計算できるということでしょうか?


444 :デフォルトの名無しさん:2005/06/07(火) 23:46:08
ヘルプ読め

445 :デフォルトの名無しさん:2005/06/08(水) 10:10:12
簡単な問題かもなのですが
一つの範囲の数値の合計を出すのに

Cells(1, A).Value+Cells(1, B).Value+ … +Cells(1, E).Value

としてるのですが、もっとスマートに出来ないものでしょうか?
Excel上での Sum(A1:E1) のような式が無いものかと思い
書き込みさしてもらいました。

446 :デフォルトの名無しさん:2005/06/08(水) 17:29:55
>>445
SUM使えばいいじゃん。
使い方はヘルプでも読め。

447 :デフォルトの名無しさん:2005/06/09(木) 13:18:58
445 だけなら 446 でいいとおもう。後で面手しやすいとかなら、こんな
感じかなぁ。

Dim i As Long
Dim lngSum As Long

For i = 1 To 20
If IsNumeric(Sheet1.Cells(1, i)) Then
lngSum = lngSum + Sheet1.Cells(1, i)
End If
Next

448 :デフォルトの名無しさん:2005/06/09(木) 18:02:21
>>447
> 後で面手しやすいとかなら
だったらユーザー定義関数にした方がいいような気が

Function iSum(Rng As Range) As Double
 Dim buf As Double, rObj As Range
 For Each rObj In Rng
  If IsNumeric(rObj.Value) Then buf = buf + rObj.Value
 Next
 iSum = buf
End Function


MsgBox iSum([A1:A20])

449 :デフォルトの名無しさん:2005/06/09(木) 21:17:22
根本的にユーザー定義関数?使う意味がよくわからん。
iSum = Application.WorksheetFunction.Sum(Rng)

450 :質問:2005/06/09(木) 21:18:54
Excel2003のVBAについてです。
Filter()を使用して、下記のような多次元配列の2列目中の値を
検索するにはどうのように引数を指定すればいいんでしょうか??

Dim A_Rank_sort(3, 5) As String

A_Rank_sort(1, 1) = "a"
A_Rank_sort(1, 2) = "a"
A_Rank_sort(1, 3) = "a"
A_Rank_sort(1, 4) = "a"
A_Rank_sort(1, 5) = "a"

A_Rank_sort(2, 1) = "b"
A_Rank_sort(2, 2) = "b"
A_Rank_sort(2, 3) = "b"
A_Rank_sort(2, 4) = "abc"
A_Rank_sort(2, 5) = "b"

A_Rank_sort(3, 1) = "c"
A_Rank_sort(3, 2) = "c"
A_Rank_sort(3, 3) = "c"
A_Rank_sort(3, 4) = "c"
A_Rank_sort(3, 5) = "c"

Filter( ? , "abc")

451 :デフォルトの名無しさん:2005/06/09(木) 21:21:24
>>449
m9(^Д^)プギャー

452 :デフォルトの名無しさん:2005/06/09(木) 21:25:37
> Filter 関数
>
> 引数 sourcearray 内で引数 match に一致する文字列がなかった場合は、Filter 関数は空の配列を返します。
> 引数 sourcearray が Null 値であるか、1 次元配列でない場合は、エラーになります。
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

とヘルプに書いてある。
一次元配列に書き出してからFilter掛けるなり、Forステートメントで総当たりかますなりお好きなように。

453 :デフォルトの名無しさん:2005/06/09(木) 21:30:00
>>452
さんくす!!!!!



454 :デフォルトの名無しさん:2005/06/11(土) 14:06:23
Excel-VBAのお奨め参考書を教えて下さい
プログラム経験はあり

455 :デフォルトの名無しさん:2005/06/11(土) 15:13:10
>>454
紙媒体に拘らないならmoug.netでいいんじゃね?

456 :デフォルトの名無しさん:2005/06/11(土) 15:40:11
うむ、紙ベースははずれが多い。

457 :デフォルトの名無しさん:2005/06/12(日) 11:21:16
VBAで5÷2=2・・・1の余りの1の部分を計算したいのですが
どうすれば良いですか?


458 :デフォルトの名無しさん:2005/06/12(日) 11:35:25
5 mod 2

459 :デフォルトの名無しさん:2005/06/12(日) 16:18:39
紙ベースは確かにハズレ多いな
体系的に書かれた物(書こうとした痕があるもの)があるのかなぁ
VBAつーかVBだったらあるんかな

460 :デフォルトの名無しさん:2005/06/12(日) 19:07:56
>>459
書いてみっか


461 :デフォルトの名無しさん:2005/06/14(火) 23:05:32
Amount:="=Sheet1!R1C1:R1C6"
のR1C1:R1C6の部分をFor文で
R2C1:R2C6→R3C1:R3C6→R4C1:R4C6→
という感じでループを回したいと思っています。

変数iを使って
Amount:="=Sheet1!R" & i & "C1:R" & i & "C6"
等、いろいろ試しましたが、ことごとくコンパイルエラーが出てしまいます。

どう書いたらいいのか、もし良ければ教えてください。

462 :デフォルトの名無しさん:2005/06/14(火) 23:41:10
Amount:=って何の引数だよ?
なんで最低限の情報も書けないかなぁ?

463 :461:2005/06/15(水) 01:48:18
>>462
棒グラフにエラーバー(Y誤差範囲)をつけるときに出てきます。

もう少し詳しく言うと、棒グラフの各棒に対するエラーバーの長さがR1C1:R1C6に書いてあります。
棒グラフは何枚もあり、1枚目の棒グラフのエラーバーの情報はR1C1:R1C6に
2枚目の棒グラフのエラーバーの情報はR2C1:R2C6に…
という感じになっています。

棒グラフにエラーバーをつけるときのスクリプトは、1枚だけ書くなら
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:= _
xlPlusValues, Type:=xlCustom, Amount:="=Sheet1!R1C1:R1C6"
で良いと思うのですが、For文を使おうとしたときに、
エラーバーの情報が書かれている範囲を一行ずつずらしていく方法がわからないんです。

うまく説明しにくいのですが、これで伝わりますでしょうか?

464 :461:2005/06/15(水) 02:05:25
すみません。
上の問題について、別の言い方で説明させて下さい。

A1,A2,…A10のセルを順番に選択するには、

Dim i As Integer

For i = 1 To 10
Range("A" & i).Select
Next i

でいいですよね?(実際は、Range("A" & i).SelectとNext iの間に何か書いてマクロに仕事をさせる)

では、1つのセルではなく、範囲を順に選択したい時はどうすれば良いのでしょうか?
具体的には、R1C1:R1C6,R2C1:R2C6,…,R10C1:R10C6を順に選択する方法や
または、A1:F1,A2:F2,…,A10:F10を順に選択する方法が知りたいです。

ちなみに、エラーバーを書くときにはA1:F1式の書き方は使えなさそうなので、
R1C1:R1C6式の書き方での方法を、どなたかご教授願えませんでしょうか?



465 :デフォルトの名無しさん:2005/06/15(水) 09:11:18
そういう内容なら、 Sheet1.Cells(RowIndex, ColumnIndex) 使う方が楽だよ。


466 :デフォルトの名無しさん:2005/06/15(水) 13:03:42
>>464
>では、1つのセルではなく、範囲を順に選択したい時はどうすれば良いのでしょうか?
ヒント:Rangeオブジェクト

467 :デフォルトの名無しさん:2005/06/15(水) 17:22:30
セル(行, 6)の値が6桁、もしくは7桁でなければメッセージを出力するようにしたいの
ですが、下記だとちゃんと動作しません。6だけとか7だけなら大丈夫なんですが、
orの使い方がおかしいのでしょうか?
つまらない質問で恐縮ですがお願いします

If Len(Cells(行, 6)) <> 6 Or 7 Then

468 :デフォルトの名無しさん:2005/06/15(水) 17:32:50
あきらかにおかしい。
7の部分にも式がいる。

469 :467:2005/06/15(水) 17:38:01
>>468
レス有難うございます。
↓みたいに書いてみたのですがダメですた。

If Len(Cells(行, 6)) <> 6 Or Len(Cells(行, 6)) <> 7 Then

何か根本的に間違ってますか?
バカな質問なんだと思いますが、よろしくです。

470 :デフォルトの名無しさん:2005/06/15(水) 17:46:28
>>469
それじゃ「6以外の場合、又は7以外の場合」なので、6と7以外の数値はもちろんのこと、
6も「7以外」に該当し、7も「6以外」に該当するので全ての数値でTrueが返る。

整数値で6又は7以外ってことは、6未満と7より大きい物が該当すればいいのだから
If Len(Cells(i, 6).Value) < 6 Or Len(Cells(i, 6).Value) > 7 Then
でOKでしょ。
又はLike演算子を使って
If Len(Cells(i, 6).Value) Like "[!67]" Then
とか。

471 :467:2005/06/15(水) 18:00:12
>>470
解決しました。ありがとうございました。

472 :デフォルトの名無しさん:2005/06/15(水) 18:04:11
ゴメン、Like演算子使うときは
If Not Len(Cells(i, 6).Value) Like "[67]" Then
だわさ。

473 :デフォルトの名無しさん:2005/06/15(水) 22:02:04
範囲を順に選択するときに、

Dim i As Integer

For i = 1 To 10
Range("A" & i & ":F" & i).Select

Next i

だと ":F" の所でエラーが出てしまいます。
教えてばかりで済みませんが、お願いします。

474 :デフォルトの名無しさん:2005/06/15(水) 22:15:25
>>473
普通に動いてる
by WindowsXP、Excel2002

475 :デフォルトの名無しさん:2005/06/15(水) 22:19:44
>>469
それは And だろ。

476 :デフォルトの名無しさん:2005/06/15(水) 22:34:29
>>474
自分で書いた時には、スペースを全く入れずに、
Range("A"&i&":F"&i).Select
と書いていたのが、コンパイルエラーの原因でした。
ありがとうございました。

477 :デフォルトの名無しさん:2005/06/16(木) 17:59:33
ISBNを入力すると
amazonや、books.or.jp等のホームページから
からタイトル、作者、出版年、などの書誌データ
を取得する
というのをEXCELかACCESSで
実行できるようにしたいのですが、
どうすればいいでしょうか

478 :デフォルトの名無しさん:2005/06/17(金) 10:22:27
>>477
VBA関係ない。
どうすれば取得できるかがわかった上で
それをVBAでやるにはどうすれば良いかがわからなかったらまた来い。

479 :デフォルトの名無しさん:2005/06/17(金) 19:08:49
複数のシート1,2があります。
それに両方シート保護かけてます。
片方のシート保護を解除しようと
両方のシートを選択した状態でマクロで
Worksheets(1).Unprotectとやるとエラーで返ってきてしまうんです。
片方だけ選択した状態ならうまくいくんでしょうが、
現時点ではそれができなくて困ってます。
ぐぐったりしてみましたが、こういうエラーはあるらしいということしかわからず
解決法がまだわかってません。
この場合どのように回避すればよろしいでしょうか。

480 :デフォルトの名無しさん:2005/06/17(金) 19:24:42
>>479
すいません解決しました。
結局最初単一選択して処理が終わった後
必要な部分を選択しなおすようにしました。

481 :デフォルトの名無しさん:2005/06/17(金) 21:05:40
>>477 Webサービスクライアントをちゃんと勉強するのがすじだと
おもうけど、amazonならURLベースでの検索にも対応しているから
たんなるHTTPクライアントの作り方だけ勉強すれば終わり。とりあえず
amazonいって関連ページ読んできな。

482 :名無しさん@Linuxザウルス:2005/06/21(火) 14:32:55
EXCEL2000でファイル保存する時に、unicodeで保存する方法教えてください。
調べた限りでは、VBAではS-JISしか無理っぽいのだが。。。

483 :科学:2005/06/21(火) 19:37:22
VBAで遺伝的アルゴリズムやニューラルネットを使って
相場の予測をしようと しているものです。
初歩的なコードは入手したんですが、 自分で使えるよ
うにする技術がありません。

そこで、VBAのコードを代わりに書いて下さる方を探して
います。3万円の謝礼金も用意しています。

詳しくは私のHPまでお越しください。
http://homepage3.nifty.com/sikou-off/

484 :デフォルトの名無しさん:2005/06/22(水) 23:07:07
>>483
マルチポストはうざがられることぐらい知っとけ。


485 :デフォルトの名無しさん:2005/06/23(木) 15:55:06
質問です。

ACCESSなんですが、
フォームの中にサブフォームを作って、そのサブフォームでは
テーブル(レコードセット?)1個だけを置いて表示するようにしています。

で、このテーブルのカレントレコードを見て
その後の操作でページ遷移させた先の画面で、レコードの内容を
テキストに初期表示させたいのですが・・・

サブフォームに表示させたテーブルのカレントレコードを読み取る方法が
分かりません。
[レコードセット名]![列名]
ではダメみたいだし・・・。

486 :デフォルトの名無しさん:2005/06/23(木) 16:39:21
>>477
「なでしこ」使えばラクだと思いますよ。
AmazonAPIキーを取得すれば、検索の自動化は許可されるとおもいますよ。
後は、なでしこで、HTTP関連、正規表現、エクセル操作関連の命令を組み合わせてプログラム。

いいものができますように。

487 :デフォルトの名無しさん:2005/06/23(木) 16:54:05
>>485
Me.サブフォーム名.Form.コントロール名.Value

488 :デフォルトの名無しさん:2005/06/23(木) 17:15:22
>>487
レスありがとうございます。
ただ、ところどころ「.」を「!」に代えないとマズイような。

で、今までずっと出来なかった原因を、
色々と言葉を代えてネットで検索してみてようやく発見しました。

サブフォームをウィザードで作った場合、
フォームの一覧で見える名前と、コードを打つ時に使うサブフォーム名が
食い違ってしまうみたいで、そこの設定を直したら
「Me!サブフォーム名.Form!コントロール名.value」
とかでいけました。



489 :488:2005/06/23(木) 17:26:12
訂正。

>サブフォームをウィザードで作った場合、
>フォームの一覧で見える名前と、コードを打つ時に使うサブフォーム名が
>食い違ってしまうみたいで

ではなくて、
フォーム一覧からサブフォームの名前を変更したときに
デザインビューで見たときの名前までは変更がされておらず
そこの手動での修正をしていなかったので失敗していたようです。

490 :デフォルトの名無しさん:2005/06/23(木) 17:42:22
>>488
> ただ、ところどころ「.」を「!」に代えないとマズイような。
まずいわけじゃない。つーか、! って好きになれん。

491 :デフォルトの名無しさん:2005/06/23(木) 19:47:25
質問させて下さい。
トリップ作成とかに使われるcrypt関数に関してですが。。
uncrypt.dllはググって入手したのですが、VBAからどの様に使えばいいのか教示戴ければ幸いです。
板違いならお詫び申し上げます。

492 :デフォルトの名無しさん:2005/06/23(木) 20:03:19
普通のdllの使い方と変わらないでしょ。
普通の使い方すらできないなら勉強しろ。

493 :デフォルトの名無しさん:2005/06/23(木) 20:30:07
ヒントとなるキーワードくらい言ってもいいんかね。山椒とか

494 :デフォルトの名無しさん:2005/06/23(木) 23:36:35
>山椒とか
って何??

495 :デフォルトの名無しさん:2005/06/23(木) 23:52:57
参照のこと。
これ以上はスレ違い。

496 :質問よろしくお願いします。:2005/06/24(金) 08:44:44
エクセルVBAで
コピー散乱を防止するために、
画面に無理やり名前を登録したいのですが。
cookieを取得して、入力する方法ってありますか?


497 :デフォルトの名無しさん:2005/06/24(金) 14:16:36
エクセルでなぜCookie?


498 :デフォルトの名無しさん:2005/06/24(金) 18:26:39
つーか何処と通信シテンノ? (;゚∀゚)=3 ハァハァ

499 :デフォルトの名無しさん:2005/06/28(火) 18:34:36
質問です
Excel2000でどうすればウェブクエリの対象URLに変数を指定できますか?

500 :デフォルトの名無しさん:2005/06/29(水) 04:04:24
ツール>マクロ>新しいマクロの登録>OK
クエリの操作を手動で行う
>■ボタンで停止
生成されたコード中に、自分が指定したURLが入っているので
そこを変数にすればよろし。

質問
Sub VBのバグ()
For i = 0 To 23 Step 1
今 = DateAdd("n", i * 60, 0)
If 今 = #5:00:00 AM# Then
MsgBox 今
End If
If 今 = #6:00:00 AM# Then
MsgBox 今
End If
Next
End Sub

午前5時は常無視される。なんでだろ?

501 :デフォルトの名無しさん:2005/06/29(水) 05:00:40
>>500
それをVBのバグとか言う奴は
浮動小数点演算について勉強しなおしてこい。

因みに
Dim 今 As Date, i As Long
For i = 0 To 23
 今 = TimeSerial(i, 0, 0)
 If 今 = TimeValue("5:00:00") Then
  MsgBox 今
 ElseIf 今 = TimeValue("6:00:00") Then
  MsgBox 今
 End If
Next i
とすれば普通に5:00もTrueが返るし、
If 今 = #5:00:00 AM# Then

If CLng(今 * 24) = #5:00:00 PM# * 24 Then
でも5:00でTrueを返せる。
何故そうなるのかは浮動小数点演算について調べればわかる。
因みに5:00以外にもいくつか>>500のコードでTrueを返さない時間があるはずだ。

502 :デフォルトの名無しさん:2005/06/29(水) 05:29:11
>>501
あっ、そっか!時刻は一日を1として算出しているんだった!!
ありがとう!!!

503 :デフォルトの名無しさん:2005/06/29(水) 12:42:28
改行コードがLFのみなテキストをLine Inputで読み込む方法ないですか?

504 :デフォルトの名無しさん:2005/06/29(水) 14:14:52
>>503
@Line Inputで読み込んだ後、vbLfでSplitする
AFSOのReadLineメソッドを使う(LFも改行扱いになります)
Bテキストエディタで改行コードの一括置換を行う

505 :デフォルトの名無しさん:2005/06/29(水) 23:58:21
Excelのカスタムアプリにおける定数の保守についてです。Excelで業務アプリ組んでる人、意見下さい。

環境:
Excel 2000
50〜100人規模対象

やりたいこと:
データベースからデータを取得するコードを組み込んだVBAProjectを配布
データベースへアクセスするのに必要な定数(データベースのフルパスやSQL句)を後から変更できるようにしたい。

というようなことを構築中なのですが、定数をどうやって持たせるか悩んでます。
管理者あるいは引き継いだ人間が定数を容易に保守できるように、かつユーザからは容易に触れることができるように
したいのです。
サーバに置くシステムなら、ちょこちょことコードの定数定義を書き換えれば済む話ですが、Excelで配布する以上、
ユーザ任せで複製増殖しまくり、散らばった複製のコードやモジュールを差し替えるのは現実的ではありません。

目下のところ、設定ファイルに初期値を持たせるくらいしか思い当たらず、また、そのファイルをクライアントに置くか
サーバに置いて共有させるか、どちらがいいかも決めかねています。
(特に専門教育を受けることもなく自己流でやってきたので、言語の仕様はともかく、システム全体の組み方となると
どこか大事なところが欠けているような気がします。)

どういう手法を取るのが最善でしょうか?

506 :デフォルトの名無しさん:2005/06/30(木) 10:18:19
>>505
データベース接続以外の定数をデータベースに持たせる、、ってのは?

507 :デフォルトの名無しさん:2005/06/30(木) 15:24:51

………………へんじがない。 ただのしかばねのようだ……。  ▼

508 :デフォルトの名無しさん:2005/06/30(木) 22:08:45
>>505
参考になるかわからないがけど、うちの会社でも同じ様な状況があって。
いちおう、MSDNでは「ワークグループテンプレート」を使う方法が紹介されてる。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/modcore/html/deovrdeployingtemplatesapplicationspecificaddins.asp

ただ、共有に関するエラーが起きるのが怖かったので、うちの会社では以下の方法を使った。
作業者は、作業開始用の.exeファイルを実行すると、サーバーからExcelファイルをそれぞれの
クライアントにコピーして、そのExcelファイルを開く。
それで、Openのタイミングでマクロが走って作業開始。
毎回サーバーからコピーするので保守の結果を反映させるのが容易だし、Excelファイルを開く
タイミングで何かマクロを仕込んだりできる。

509 :505 ◆EmCZerrWa2 :2005/06/30(木) 23:49:54
>>506
解決にならないと思います。

>>508
.exeファイルでExcelファイルのOpen/Closeを閉じ込めるという発想ですね。
追求すれば解決の目はありそうですが、ファイルの保存先やファイルの継承利用はユーザ任せにするので、
今回の目的には向いていない面がありそうです。
(もっと言うと、コンポーネントだけ配布して、ワークシートの作り込みはユーザ任せにするつもり。)

505で書いた設定ファイル利用ですが、
 ・クライアントに置いた場合:設定変更はユーザが行う。設定はPC1台につき1回必要。
   短所)ユーザに設定値を配布しなければならない。ユーザにスキルが必要(そしてスキルがない)。
 ・サーバに置いた場合;設定変更は管理者が行う。設定は全体で1回だけ。
   短所)データベースの置き場所を自由にしたいがためなのに、肝心の設定ファイルの置き場所を固定しなければならない。
このあたりが迷いどころです。

RDBMSなら難しくないのですが、ユーザ任せにするためにExcel環境を選択してるのがすでに無茶でしょうか。
もっとスマートな解決方法があっても良さそうなのですが。

510 :デフォルトの名無しさん:2005/06/30(木) 23:50:57
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?お願いします。

511 :デフォルトの名無しさん:2005/07/01(金) 00:02:41
>>510
ForeColorプロパティにRGB値を設定。
項目ごとに色を分けるのは、たぶん不可能。

512 :デフォルトの名無しさん:2005/07/01(金) 00:18:36
>>509
>あまり深く考えて質問したとは思えない。
状況をよくしりませんが、SQL句程度ならなりうると思いますよ。

513 :デフォルトの名無しさん:2005/07/01(金) 00:19:38
あれ、ペースと内容が変わってる

>解決にならないと思います。
状況をよくしりませんが、SQL句程度ならなりうると思いますよ。

の意。まーどーでもいいが。

514 :デフォルトの名無しさん:2005/07/01(金) 00:25:12
漏れも>>506が一番簡単な実現方法だと思うが。
>>509なんか勘違いしてね?

515 :505 ◆EmCZerrWa2 :2005/07/01(金) 00:30:56
>>513
あぁなるほど、SQL句はデータベース側に置けばいいかもしれませんね。
んでも、データベース接続設定はどこに置いたらいいでしょう?
これが一番やっかいなのですが。

516 :505 ◆EmCZerrWa2 :2005/07/01(金) 00:35:06
あと、SQL句(というか抽出条件)もユーザ任せにできたらいいな、というのが難解なところです。
そういう仕様が前提になっているために、安易にデータベース側(共有側)に持たせることが出来ないのです。

自由度を求めすぎかも。

517 :デフォルトの名無しさん:2005/07/01(金) 06:51:25
>>515
それだけはどうにもならんだろう。コードで手当たり次第接続してみるようにすることもできるが、、

あと、SQL句をユーザーが自由に、ってのはデータを破壊する可能性があることをお忘れなく。

518 :デフォルトの名無しさん:2005/07/01(金) 07:36:23
詳細検索画面をたくさん用意して
考えられる条件網羅のオプションや
コンボくっつけたことならある
接続設定も画面で選択・入力させたら?

519 :デフォルトの名無しさん:2005/07/01(金) 08:19:31
5113ありがとうございました!項目ごとにはダメなんですね。ちなみに日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのですが、何か良い方法はないでしょうか?よろしくお願いします!

520 :デフォルトの名無しさん:2005/07/01(金) 10:43:19

113 名前:名無しさん@そうだ選挙にいこう [] 投稿日:2005/07/01(金) 08:07:51
1083ありがとうございました!昨日ずっと悩んでいたので、助かりました!ちなみに日曜〜土曜まで何かのコントロールで表示させて日曜と土曜を赤と青にしたいのですが、何か良い方法はないでしょうか?お願いします。

521 :デフォルトの名無しさん:2005/07/01(金) 15:55:55
520はどーいう意味?

522 :デフォルトの名無しさん:2005/07/01(金) 16:03:20
519 = Excelスレとのマルチ

って意味だと思う。
まぁ、前の質問(510)からマルチだから
もう答える必要は無いだろ。

523 :デフォルトの名無しさん:2005/07/01(金) 16:21:06
マルチとは?

524 :デフォルトの名無しさん:2005/07/01(金) 16:34:18
>>523
ttp://www.media-k.co.jp/jiten/wiki.cgi?%A1%E3%A4%DE%A1%E4#i81

525 :デフォルトの名無しさん:2005/07/01(金) 18:47:44
>>516
そんなん、SQL句をもつデータベース、スキーマ、テーブルだけ固定しとけば、何も問題ないのでは?

526 :デフォルトの名無しさん:2005/07/01(金) 19:54:37
あるエクセルファイルに特定のフォントが使用されているかを
チェックすることは可能でしょうか?

527 :デフォルトの名無しさん:2005/07/01(金) 20:22:18
519の者ですが、いろんなところで質問するのは失礼ですね。失礼致しました。すいません。あらためてお願いします!ListBoxで色を付けれないとなると他のコントロールで良い方法はないでしょうか?日曜〜土曜を表示させ赤と青を付けたいのです…お願いします!

528 :デフォルトの名無しさん:2005/07/01(金) 20:25:36
あるけど教えない。
未だにマルチしたままだから。(向こうの質問取り下げてないし)

というかここまで無礼だとマルチ止めても(向こうの質問撤回しても)
答えたくなくなるな。
そんなに急いで知りたいなら自分でググでばいい。
1日何千回検索しようと誰も文句言わないから。

529 :デフォルトの名無しさん:2005/07/01(金) 20:32:50
「ListBox 文字色」
とかでググれば代用法はいろいろ出てくる。
マルチしてる暇があったら自分で調べろヴォケ!!

530 :ホームページ プロダクション:2005/07/01(金) 20:47:44
毎日がいそがしい。作り方が分からない。だけどホームページを作りたいというアナタ!当社が高品質でホームページをお作りいたします。
弊社は出来て間もないのではじめに5人という限定で無料ホームページをお作り致します。こちら→http://www16.plala.or.jp/mercigackt/

531 :505 ◆EmCZerrWa2 :2005/07/01(金) 21:53:20
>>517>>525
いかんせん今までシステム化を軽視してきた会社なもんで、データベースは漫然と存在するだけ、
今後より高度なRDBMSに入れ換えて配置も整理してという段取りになる予定、しかも異動の多い会社で
いつまでも自分が面倒見るわけにもいかない、かと言って後任として育てられる人材もいない、
というような環境なので、データベースの接続設定にも保守性を確保したいと思いました。

が、やっぱり無謀ですよね。

でも、いろいろ意見を交換させてもらって、少し目指すべきものが見えかかってきました。
もうちょっと考えを練ってみます。

>>517
そういや、SQL句によっちゃテーブルのデータをいじり倒すことができてしまいますね。(;´д`)
コード中ではスナップショットでレコードセットを取得するようにしてるんですが、それでもSQL句で
データ壊すことが可能ですか?

532 :デフォルトの名無しさん:2005/07/01(金) 22:10:26
いい加減飽きた
そろそろやめろ

533 :デフォルトの名無しさん:2005/07/01(金) 22:15:18
>>531
SELECT * FROM Table1; DELETE * FROM Table1; っていうSQL 打たれたら終わりだろ。テーブル構造
書き換えるようなSQL打たれたら、おまえが全責任とらされるぞ。

その程度の知識なら、ユーザーに自由度持たせるのは企業にとってはマイナスだらけだな。

534 :デフォルトの名無しさん:2005/07/01(金) 22:16:20
>>528
禿同。

535 :505 ◆EmCZerrWa2 :2005/07/01(金) 22:19:53
>>533
いやもうおっしゃる通りなんですが、データベースというかSQLの知識が浅いので確認なんですが、
スナップショットでもSQLによっちゃデータあぼん、ということでよろしいんでしょうか。

536 :デフォルトの名無しさん:2005/07/01(金) 22:22:51
ユーザーに自由度持たせたければ、チェックルーチンがコードの50%以上になるとおもうよ。それ
くらいの覚悟でやればいいけど、それにしても経験がないと無理。

537 :デフォルトの名無しさん:2005/07/01(金) 23:56:34
527ですが向こうの質問はどうやってとりさげるのですか?あと何がそんなに無礼でした?2ちゃんねる自体初心者なもので…お願いします。

538 :デフォルトの名無しさん:2005/07/02(土) 00:12:57
>>537
気にするな。
どっちにしろもう手遅れだ。

社会に出てから殺人して「人を殺しちゃいけないなんて知らなかった」が通用しないように、
2chでマナーに反する書き込みしてから「初心者なのでマナーを知らなかった」は通用しない。

今回の質問は、もう答えてもらえないから、次の質問から気を付けることだね。
何に気を付けるかは案内とか行って勉強してこい。大体これをここで聞くこと自体もかなり無礼な行為。
まあ1年も経てば今回と同じ質問しても答えて貰えるかもしれないけどな。

539 :デフォルトの名無しさん:2005/07/02(土) 07:23:03
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。

540 :デフォルトの名無しさん:2005/07/02(土) 09:24:55
>>539
マルチイクナイ

541 :デフォルトの名無しさん:2005/07/02(土) 12:58:59































 

542 :デフォルトの名無しさん:2005/07/02(土) 12:59:08































 

543 :デフォルトの名無しさん:2005/07/02(土) 12:59:18































 

544 :デフォルトの名無しさん:2005/07/02(土) 13:16:28
このスレは殺伐としてまつね。

545 :デフォルトの名無しさん:2005/07/02(土) 20:54:11
ウインドウ透過技術教えてください トホホ

546 :デフォルトの名無しさん:2005/07/02(土) 22:06:45
>>545
VBスレかAPIスレ行け。
ユーザーフォームで使うにしろ、API使う物はスレ違い。
ここはVBAスレだから。

547 :デフォルトの名無しさん:2005/07/02(土) 22:26:30
はじめまして。UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。

548 :デフォルトの名無しさん:2005/07/02(土) 22:34:50
>>547
どこが「はじめまして」なのやらw

510 :デフォルトの名無しさん :2005/06/30(木) 23:50:57
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?お願いします。
539 :デフォルトの名無しさん :2005/07/02(土) 07:23:03
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。

549 :質問:2005/07/03(日) 14:07:14
ファンクションプロシージャンに配列を渡して値を代入した後に、
その値を表示させるマクロを書いたのですが、
msgboxで表示させると0で表示されてしまいます。
何が問題なのでしょう??


Sub FunctionTest()

   Dim Ar(10) As Integer ''配列Arを宣言

   fun2 (Ar) 'ファンクションプロシージャfun2を呼び出す

   MsgBox Ar(0) '配列Arの0番の値を表示する

End Sub


Function fun2(x)

x(0) = 10 '10を代入する
fun2 = x '配列を戻す

End Function



550 :デフォルトの名無しさん:2005/07/03(日) 16:59:42
配列は渡せない
他の方法で代用すべし

551 :デフォルトの名無しさん:2005/07/03(日) 17:31:55
>>551
Option Explicit

Sub FunctionTest()

Dim Ar(10) As Integer ''配列Arを宣言

Call fun2(Ar) 'ファンクションプロシージャfun2を呼び出す

MsgBox Ar(0) '配列Arの0番の値を表示する

End Sub


Private Function fun2(ByRef x As Variant)

x(0) = 10 '10を代入する

End Function

552 :551:2005/07/03(日) 17:45:30
自分にレスしちまったよ orz

>>549
「値渡し」と「参照渡し」がわかってないね。

553 :549:2005/07/04(月) 06:48:12
>>551
神よ




サンクス

554 :デフォルトの名無しさん:2005/07/04(月) 18:20:59
VBA素人です。教えてください。

Excel2000なんですが、フォームを使ったルーチンを組もうとしています。
1.よくインストーラなど、順を追って説明するGUIには「次へ」みたいな
 ボタンがありますが、マルチページでコマンドボタンなどを押す事により
 次あるいは前のページ(タブ?)へ移動するようなことは出来るでしょうか?
2. フォーム上に「キャンセル」あるいは「完了」ボタンを設けて、押す事に
 よりフォームというかマクロを終了することはできますか?
 (フォームを画面から消して、マクロを終了させたい)
 いちいちフォームの右上とかの[x]を押さなくてもよいようにしたいのです。
 Cでいうところのexit()とかがあればよいのですが。

宜しくお願いします。

555 :デフォルトの名無しさん:2005/07/04(月) 18:43:33
>>554
1.出来ます
2.できますか

詳しくはヘルプ参照。
ググった方が早いかもしれんが。

556 :554:2005/07/04(月) 18:47:46
>555
HELPにはQ1はともかくQ2はありません。具具っても見つかりません。
end subとかいう回答ならばお腹一杯です。


557 :デフォルトの名無しさん:2005/07/04(月) 18:53:49
Application.Quit

558 :554:2005/07/04(月) 18:54:36
忘れていましたが、「終了」ボタンを押したとき、Excelが終了するのは
まずいのです。
すみません。

559 :デフォルトの名無しさん:2005/07/04(月) 19:14:57
ThisWorkbook.Close

560 :554:2005/07/04(月) 20:12:29
なんやらようわかりませんが、皆様レスサンクス


561 :デフォルトの名無しさん:2005/07/04(月) 20:19:02
>>554
1. できる
2. できる

状況がよくわからんので、これ以上のアドバイスはほとんど無理。1 は簡単だろ。 2 は、全ての
フォームを unload すりゃいいんちゃうかと思うが、設計次第ではそれでも VBA は動いてる。

562 :デフォルトの名無しさん:2005/07/04(月) 21:01:21
>>554
HIDE

というか、ExcelVBAをやるなら、こういうページで勉強しろ。
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu04.html


563 :デフォルトの名無しさん:2005/07/05(火) 22:42:34
Hide は消えるだけで終了しないんじゃないの。
unload がこの場合は正しいような気がする。

自分は詳しくないから断定して言えないけど。
だからこの板に来ているのだけれど。

564 :デフォルトの名無しさん:2005/07/06(水) 00:08:22
http://www.microsoft.com/japan/msdn/office/excel2003/odc_super.asp
ExcelVBAのダイアログはLoad、Unloadは勝手にやってくれるから、
ダイアログの表示、非表示は一般的にはShow、Hideを使う例が紹介されている。
初心者向けのヘルプのサンプルなんかも。

ただ、Showの前にコントロール値をセットしたい場合や、
フォームのイベントの実行のタイミングが絡んでくる場合は、
Load、Unloadを明示的に指定する必要が出てくる。
こっちを554に教えたところで理解できないだろうから。




565 :563:2005/07/06(水) 00:57:02
解説ありがとね。

566 :デフォルトの名無しさん:2005/07/07(木) 22:17:45
Excel2002のVBAで、セルの内容が
値(数値や文字列)なのか、数式なのか、配列数式なのか、を判断する方法って無いですか?
値か数式かの判断だけなら、formulaとvalueの返す値が違えば数式って判断できるけど
普通の数式と配列数式はformulaとformulaarrayのどちらで取得しても同じ値が返ってきます。


567 :デフォルトの名無しさん:2005/07/07(木) 22:42:12
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。

568 :デフォルトの名無しさん:2005/07/07(木) 22:58:59
>>567
いつまでも粘着するな
禿しくウザい

569 :デフォルトの名無しさん:2005/07/08(金) 16:32:25
バイナリファイルの指定した部分を読み込んで
10進数表示にしたいです。
どうすりゃよかとですか?

perlだと↓な感じ。

open (FILE, $in_filename );
seek FILE, hex("00053B49"), 0;
read (FILE, $buffer_a, 1);
seek FILE, hex("00053B5B"), 0;
read (FILE, $buffer_b, 1);
close (FILE);
$a = unpack("C", $buffer_a);
$b = unpack("C", $buffer_b);


570 :デフォルトの名無しさん:2005/07/08(金) 17:16:49
普通に

571 :569:2005/07/08(金) 17:45:42
seekでファイルポインタは動かせた。
その後の読み込みの方法が?です。
Getだとseekが効かないし、Inputでできるんですかね。
Inputじゃ期待通りの値にならない。

572 :デフォルトの名無しさん:2005/07/08(金) 19:02:21
VBAでインターネットエクスプローラーを操作することはできますか?
主にデータを送信したり、データを受信したりしたいです。
ご返信よろしくお願いします。

573 :デフォルトの名無しさん:2005/07/08(金) 19:14:16
>>572
できるよ。

やり方は自分で勉強してね。
たぶんVBAの本や解説サイトより、
VB6のものを参考にした方がいいだろうな。

574 :デフォルトの名無しさん:2005/07/09(土) 01:29:40
>>572
「三流君」でぐぐれ。

575 :デフォルトの名無しさん:2005/07/09(土) 15:06:37
サブミットってなんなんバカのお前らでもわかるんちゃうん?
これくらい。


576 :デフォルトの名無しさん:2005/07/09(土) 16:17:07
サーブルーチンってなんなん?
あほの諸君らにもわかるんちゃうん?こたえてみ!


577 :デフォルトの名無しさん:2005/07/09(土) 16:24:35
サブルーチンならわかるけど
サーブルーチンは知らん

578 :デフォルトの名無しさん:2005/07/09(土) 20:20:58
おれのあそこはサーベルちんちんと呼ばれてるが

579 :デフォルトの名無しさん:2005/07/09(土) 20:56:07
鞘つきサーベル

580 :デフォルトの名無しさん:2005/07/10(日) 03:08:11
そんなことよりちょっとだけ質問させてください。UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。

581 :デフォルトの名無しさん:2005/07/10(日) 03:31:41
そんなことより質問させてくれ。
VBAってEXCELを使った一般事務でも使うことあるの?

582 :デフォルトの名無しさん:2005/07/10(日) 03:38:20
>>580
マルチ、条件後出し、頻繁な催促。
2chのマナー違反をこれだけやってれば、誰も答えてくれなくて当然。

>>581
あるよ。
普通に使ってる。

表計算ソフトはマクロが使えてナンボだからね。
ワープロならまだしも、表計算ソフトはマクロ使えないうちは
「表意計算ソフト(Excel)使えます」とは言えない。

583 :デフォルトの名無しさん:2005/07/10(日) 04:16:57
>>582
ま、まじでか・・・orzこれから勉強するかな
サンクス

584 :デフォルトの名無しさん:2005/07/10(日) 05:17:02
>571
もう解決してるよな・・・。
やったことないけどGet使えばできそうだし。HexもVBAで使えるし・・・。
できないなら興味はある。


585 :デフォルトの名無しさん:2005/07/10(日) 13:54:09
VBAっていうのは特別なソフトを購入しなければいけないのでしょうか?
だれかおしえてください。

586 :デフォルトの名無しさん:2005/07/10(日) 14:12:13
基本的には、Excelが動いてればExcelVBAが使えるし、Wordが動いてればWordVBAが使える。
ほかにソフトは特にいらない。

ただ、Microsoft Office用の開発環境も発売はされてる。
http://ascii24.com/news/i/soft/article/2003/09/16/645953-000.html?geta


587 :デフォルトの名無しさん:2005/07/10(日) 14:42:57
visual basic.NET 2003 を持っているのですが、
これだけでもVBAと同じことはできますか?
また、コードの書き方などはやはり違うものなのでしょうか?


588 :デフォルトの名無しさん:2005/07/10(日) 15:09:10
>>587

スレ違いですよ。
ttp://pc8.2ch.net/test/read.cgi/tech/1118072681/

589 :デフォルトの名無しさん:2005/07/10(日) 15:31:59
急にsavファイルを読み込まなくなったんだけど、どうすれば直せます?

590 :デフォルトの名無しさん:2005/07/10(日) 18:22:30
Excel 2000 VBAの質問です。宜しくお願いします。

1.コールバック形式のコントロールをコマンドボタンから呼び出したい。
カレンダーをフォームに貼る場合に、場所を取らない
Microsoft Date and Time Picker Control 6.0(SP4)を使いたいと思います。
しかし、このコントロールは操作をしなくても今日の日付の値を持っているようで、
毎回使用者に日付を入力させたい、という目的がある場合は、操作を見過ごされ
そうで具合が悪いのです。(操作もしていないのに値が表示されていると、
デジャブに陥るかもしれない)

テキストボックスとコマンドボタンを組み合わせ、コマンドボタンが押されたら
カレンダーがポップアップし、日付を選ぶとテキストボックスに値が出るように
したいと思います。
正直VBAはよくわからないのですが、CommandButton*_click()イベントから
このコントロールを呼び出すにはどう書けばよいのでしょうか?

2.VBA中からOSのcopyコマンドなどを呼び出せるか。
 テンプレートとなるファイルを開いて加工した後、「名前を付けて保存」でも
いいのですけど、バグを入れてしまった場合にテンプレートを破壊しそうで
気持ちが悪いです。できれば予め名前を変えたコピーを作成したいと思いますが
具体的にはどう書けばよいのでしょうか?

591 :デフォルトの名無しさん:2005/07/10(日) 18:38:01
>>590
1.
事前に非表示で配置しておいて、
ボタン押したら表示するようにすればいいだけじゃん。
具体的なやり方はググるなりヘルプ読むなりお好きなように。

2.
わざわざそんなもん呼ばなくても、VBAにもFileCopyステートメントがあるし、
DOSコマンド呼ぶよりはFSO使う方が一般的。
具体的なやり方はググるなりヘルプ読むなりお好きなように。

592 :デフォルトの名無しさん:2005/07/10(日) 18:55:21
>>591 不親切レスサンクス

1. そんなやり方はググってもヘルプにもありません。
2. FSOってのは知りませんでした。調べてみます。

593 :デフォルトの名無しさん:2005/07/10(日) 19:01:57
>592
> 1. そんなやり方はググってもヘルプにもありません。
うちのExcel2000のヘルプには載ってる
まぁ、あとはがんがれ

594 :デフォルトの名無しさん:2005/07/10(日) 19:10:39
>>592
十分ちょっとで「ありません」かよ。
そういうのは「ありません・みつかりません」じゃなくて「探してない・調べてない」って言うんだよ。
まあ、VBAの知識以前に人としての標準的な思考力があれば数秒で見つかるけど。

595 :デフォルトの名無しさん:2005/07/10(日) 19:43:18
ここの質問者ってのは検索能力も低いやつが多いね

596 :デフォルトの名無しさん:2005/07/10(日) 20:04:34
そんなことよりちょっとだけ質問させてください。UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。

597 :デフォルトの名無しさん:2005/07/10(日) 20:21:18
>>596
おまえ、元の質問者じゃないだろ
いい加減コピペ止めろ

598 :デフォルトの名無しさん:2005/07/10(日) 20:21:27
>>595
スレの立て方にも問題があるんだと思うな。
まったくテンプレ張ってないでしょ。

>>596
しつこい。
アンタの質問は「ボンカレーでどう料理したらシチューができますか?」
ってきいているようなもんだ。もともとそんな機能ないんだからムリ。

599 :デフォルトの名無しさん:2005/07/10(日) 20:29:24
ボンカレーでどう料理したらシチューができますか?

600 :デフォルトの名無しさん:2005/07/10(日) 20:45:24
>>599
日本で大衆に認識されてるカレーとシチューは別物ですが、
料理の定義としてはカレー=シチューですが、何か?

601 :デフォルトの名無しさん:2005/07/10(日) 20:47:15
う・・うーん
とりあえず色を取るためにミルクをたっぷり注いで・・・
あ、ビーフシチューでいいならまだ近いかな・・

602 :デフォルトの名無しさん:2005/07/10(日) 21:19:32
インドではスパイスを用いた料理はすべてカレー

603 :デフォルトの名無しさん:2005/07/10(日) 21:44:50
> インドではスパイスを用いた料理はすべてカレー
嘘ついじゃダメだよ。それとも無知なだけかな。
スパイスを用いた『煮込み』料理がカレーだよ。

604 :デフォルトの名無しさん:2005/07/10(日) 21:51:01
カレーとシチューを深く議論するスレVer.4はここですか?

605 :デフォルトの名無しさん:2005/07/10(日) 21:56:35
この前の伊東家で「残ったカレーを親子丼にする裏技」あったし、意外と余裕かもしれん。

606 :デフォルトの名無しさん:2005/07/10(日) 22:11:48
辞書編纂者になって、シチュー: ボンカレーもシチューのひとつ。

と書けば解決!

607 :571:2005/07/10(日) 23:11:04
>>584
まだ未解決です。
やっぱり、Getを使うってことでいいんですかね?

608 :584:2005/07/11(月) 00:10:38
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_070.html
このページを見て判断したのですが、できません?

Get #1, Position, MyRecord
GetってOpenで指定したTypeによってきちんと動いてくれるらしい。
取得したい数のbyte型を宣言して、第3引数にすればできるのかな?
できないなら自分で確かめるため、perlインストールするかな。

609 :デフォルトの名無しさん:2005/07/11(月) 07:23:32
>>603
それは日本や欧米の定義じゃないか。
デタラメ言うな。

610 :デフォルトの名無しさん:2005/07/11(月) 07:29:11
>>609
日本や欧米にカレーの定義なんて無いよ
インドのカレーの定義が>>603

611 :デフォルトの名無しさん:2005/07/11(月) 07:36:10
カレー論争はここで。
イ  ン  ド  の  味  の  基  本
http://food6.2ch.net/test/read.cgi/food/1112280678/

612 :571:2005/07/11(月) 10:51:02
できた( ´Д⊂ヽ

こんな感じ。これで1Byte取れた。
Dim strREC As Byte
GetFileNo = FreeFile
Open Filename For Binary As #GetFileNo
Get #GetFileNo, 197, strREC

>>608
「Get #1, Position, MyRecord」の通りだった。Thx.

613 :デフォルトの名無しさん:2005/07/11(月) 11:49:15
質問です。
なんかメチャ初歩的なことなんですが・・・

If IsDate(txt.Value) = False Then
   MsgBox "有効な日付ではありません。", vbCritical, "日付エラー"
   txt.SetFocus
    Exit Sub
end if

これでtxt.Valueに19991212が入っていて
エラーメッセージが出てしまうのは何故なんでしょうか?

614 :デフォルトの名無しさん:2005/07/11(月) 12:32:12
"1999/12/12"
"1999-12-12"
"H11/12/12"
"H11-12-12"

615 :613:2005/07/11(月) 12:38:59
レスどうもです。

/や-が入っていないと
そもそも日付として認識してくれないんですね。

616 :デフォルトの名無しさん:2005/07/11(月) 15:31:10
>>612
もう解決したようだけど・・・。

inputはVBA内部コードへ文字コード変換が入るのでバイナリには使えない。
バイナリを読む場合は、inputbを使用してbyte配列に読み込む。

dim hoge() as byte
hoge=inputb(...)

617 :566:2005/07/11(月) 17:37:40

完全に放置されてる566です。
どなたか>>566にも回答をお願いします。

618 :デフォルトの名無しさん:2005/07/11(月) 18:01:36
>>617
excelは詳しくないけど、hasarrayかな?

619 :デフォルトの名無しさん:2005/07/11(月) 18:39:06
Left(Range("a1").Formula, 1)
IsNumeric(Range("a1"))
TypeName(Range("a1").Value)
VarType(Range("a1").Value)

620 :566:2005/07/11(月) 18:49:01
>>618
できました。
ありがとうございます。

621 :デフォルトの名無しさん:2005/07/12(火) 13:51:58
質問です。


テキストボックスの値をSQLでデータベースに入れようとしています。

str型変数を入れるテキストボックスなら
空欄のままでも気にせずデータベースに突っ込めるんですが、
int型変数を入れるテキストボックスだと
何かエラーになってしまうみたいです。

INT型のテキストボックスからは
データベースに空欄を入れられない仕様なんでしょうか?

622 :デフォルトの名無しさん:2005/07/12(火) 14:00:14
自分だったらそこで、(LPC(T)STR)の型変換試してみたい気がする


623 :デフォルトの名無しさん:2005/07/12(火) 14:43:18
>>621
SQL 的にそうだよ。
CHAR型なんかで VALUES ("") は可。
INT型とかで VALUES () は不可。

624 :デフォルトの名無しさん:2005/07/13(水) 20:23:04
初歩的な事ですがご教示下さい。

各セルの中に文字列が入っていればメッセージを出す下記のようなスクリプトを書いてい
ます。
If Range("a1").Value <> "" Or Null Then
MsgBox "月曜日1"
End If
If Range("b1").Value <> "" Or Null Then
MsgBox "月曜日2"
End If
If Range("c1").Value <> "" Or Null Then
MsgBox "月曜日3"
End If

こんな調子で書いていくとif〜end ifが延々と繰り返されて何だか不細工に見えます。
これをもっと見やすくまとめるにはどうすれば良いのでしょうか?教えて下さい。

625 :デフォルトの名無しさん:2005/07/13(水) 20:42:49
どういうメッセージを出したいの?
Aが空欄の時、「空白です。」,Bが空欄の時、「空白です。」・・・
と言ったような決まったメッセージを出すのかな?
それとも、
Aが空欄の時、A, Bが空欄の時、B・・・
といった1つの条件に1つのメッセージを出すのかな。

626 :デフォルトの名無しさん:2005/07/13(水) 20:50:24
>>624
その例通りなら
dim i as long
for i = 1 To 3
If cells(1, i).value <> "" Then MsgBox "月曜日" & i
next i

メッセージパターンが1,2,3じゃないなら、最初にメッゼージ内容を配列にでも入れておけばいい
ついでにこの場合Nullは要らないし、更にifステートメント内でのorの使い方も間違ってる

627 :デフォルトの名無しさん:2005/07/13(水) 21:20:48
msgboxやlabel内の改行方法がわかりません。
どなかた教えてくださいorz

628 :デフォルトの名無しさん:2005/07/13(水) 21:44:27
msgbox→vbcrlf
labe→知らん。俺は幅の調整とスペースとかでやりくりしてたけど。

629 :624:2005/07/13(水) 21:50:25
>>625-626
レス有難うございます。
Aが空欄の場合はメッセージは出ないようにしたいと思っています。

いまテスト環境から離れてるので後で試して見ます。
有難うございました。

>>627
それは俺でも分かる。
↓な感じでどうですか?

msgbox "test" & vbLF & "test2"

labelは知らない。同じような感じでダメ?

630 :624:2005/07/13(水) 21:51:35
あ、vbcrlfでしたっけ?申し訳無い

631 :デフォルトの名無しさん:2005/07/13(水) 21:55:02
vbCr

632 :デフォルトの名無しさん:2005/07/13(水) 21:55:34
vbNewline の方がいいと思うな。
環境に左右されない。

633 :デフォルトの名無しさん:2005/07/13(水) 22:06:18
環境って。。。
VBA使うのはWinとMacだけでしょ。
ならcrでもcrlfでもlfでも問題ないだろ。

msgboxではなくテキスト出力ってなら話は別だけど。

634 :デフォルトの名無しさん:2005/07/13(水) 22:27:27
皆さんありがとうございました。助かりました!!

635 :621:2005/07/13(水) 23:17:04
また新たに質問です。

レコードの中に
[ID,"1","1","0",999,999,NULL] (NULLは文字列「""」で入れたもの)
のように入っているんですが、

IDでSELECTして持ってこようとすると
「1つ以上の必要なパラメータに値がありません」
と言われてしまいます。

NULLがまずいのかと思って
COALESCE(列名,0)とかやってみましたが
「オートメーションエラーです。エラーを特定できません」
と返されてしまいました。

NULL入りのレコードをどうやって持ってくればいいのでしょうか?


>>623
どうもです。
SQL側の仕様だったんですね。

>>622
こちらに対するレスなのかどうかよく分かりませんが、
LPC(T)って何でしょうか?
ググってみたけどヨクワカラン・・・。

636 :デフォルトの名無しさん:2005/07/14(木) 00:49:04
フォルダにエクセルファイルが30個くらいあるんですけど
全ファイルのデータを取得し、1つのCSVを作成ってできますか?

637 :デフォルトの名無しさん:2005/07/14(木) 01:00:42
>>636
出来るよ。
がんばってね。

638 :636:2005/07/14(木) 01:31:36
方法を教えてください

639 :デフォルトの名無しさん:2005/07/14(木) 07:14:01
>635
データベース何使ってんのかしらねーけど、
Nullだったら、他の値を入れるようにSQL文書けばいんじゃね?
ACCESSね
SELECT IIF( ISNULL(a),"a","B") AS test
FROM テーブル1;

640 :デフォルトの名無しさん:2005/07/14(木) 07:15:14
>>635
Access かな? VBAの問題じゃないと思う。
Access で直にSQLを打ってみて、使えるSQL文をVBAに使えば?

>>638
一つ一つのファイルを開き、データを取得し、一つのCSVに書き出します。w

641 :デフォルトの名無しさん:2005/07/14(木) 08:09:57
>>638
For内でWriteやPrintを使って1行目からデータ下端行までをCSVに書き出し
をForで全シートに操作、をDoとDirでフォルダ内の全ブックに操作。以上。

方法は教えたよ。あ、コード書いてってのはさすがにスレ違いだから。

642 :デフォルトの名無しさん:2005/07/14(木) 15:22:01
下記のような感じで他のexcelのファイルを読み出すマクロを作っています。

Workbooks.Open Filename:="C:\test\test.xls"

test.xlsをバックグラウンドで開きたい(目に見えないようにしたい)のですが、
どうすれば良いのでしょうか?

↓ではダメでした。
Application.ScreenUpdating = False

またマクロから別に作成したbatファイルを実行したいのですが、どうすれば
良いのでしょうか?

643 :デフォルトの名無しさん:2005/07/14(木) 15:22:13
OSが日本語なのか英語なのかって調べられない?

644 :デフォルトの名無しさん:2005/07/14(木) 17:44:49
Private Declare Function GetLocaleInfo Lib "Kernel32.dll" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Const LOCALE_SYSTEM_DEFAULT = 2048
Private Const LOCALE_SENGLANGUAGE = &H1001
...
GetLocaleInfo LOCALE_SYSTEM_DEFAULT, LOCALE_SENGLANGUAGE,・・・

645 :デフォルトの名無しさん:2005/07/14(木) 18:35:54
片思いの相手に彼氏いるのかどうかって調べられない?

646 :635:2005/07/14(木) 19:12:37
レスどうもでした。

長いSQLをごっそり切り落として
問題の箇所だけ色々書き方を変えて試行錯誤してたら
なんとか予定通りに動いてくれました。

どうやら最初動かなかったのは
単純な記述ミスも混じってたっぽいです・・・。

647 :デフォルトの名無しさん:2005/07/15(金) 16:26:03
ワードで、エクセルのApplication.GetOpenFilenameみたいに
ファイル参照する方法はありませんか?
ワードしかない環境を想定しているので、エクセルを呼び出して利用することが出来ません。

648 :デフォルトの名無しさん:2005/07/15(金) 16:46:18
Dim buf As String
With Application.FileDialog(msoFileDialogFilePicker)
 If .Show = True Then buf = .SelectedItems(1)
End With

Msgbox buf,,"ファイルパス"


ってのはダメですか?

649 :647:2005/07/15(金) 17:00:10
>>648
すいません、ヴァージョンを書かなかった私のミスです。
word2000以上を対象にしてるんで、Application.FileDialogが使えないんです。
これってxpになってからのメソッドですよね。

650 :647:2005/07/15(金) 17:16:16
自分なりに調べてみました。

某掲示板の過去ログに
Dialogs(wdDialogFileFind)
っていうのを見つけたんですが、
参照ダイアログ(みたいな窓)は出るものの、値を取得する方法が分かりません。

これって使い物にならないんですかね。

651 :デフォルトの名無しさん:2005/07/15(金) 17:34:14
"Dialogs"で検索すれば、いくらでも解説してるところはあるわけだが。

652 :647:2005/07/15(金) 17:58:30
>>651
もちろん調べてみました。
でも、エクセルのことばっかりで、ワードって以外とないんです。
探し方が悪いのかな。

653 :デフォルトの名無しさん:2005/07/15(金) 18:05:28
やる気無しか。

654 :デフォルトの名無しさん:2005/07/15(金) 19:03:03
>>652
ヒント:頭が悪い

655 :デフォルトの名無しさん:2005/07/15(金) 19:04:14
>>652
ヒント:頭が悪い

656 :642:2005/07/15(金) 20:22:21
>>642ですが、誰か分かる人いませんか?

知りたいのは下記二点です。

1. マクロから別のエクセルファイルをバックグラウンドで開きたい
   .visible=falseとか使ってもうまくいきません。使い方が悪いのかも?

2. マクロから別に作成した.batファイルを実行したい。

どちらかでも分かる人がいたら教えて下さい。ヒントだけでも結構です。
宜しくお願いします。

657 :デフォルトの名無しさん:2005/07/15(金) 20:40:16
>>656
1. 非表示ではなくバックグラウンドなら、他のブックをアクティブにすればいいだけでしょ。
  まあ、ブックを非表示で開く方法は、マクロウィルスに使えるテクなので聞かれても答える訳にはいかないが。

2. 普通にShellで呼べばいいだけでしょ。その方法くらいは自分で調べようね。

658 :デフォルトの名無しさん:2005/07/15(金) 21:01:08
1.Shellexecute()関数
2.system()関数

て、VCなんだけど、VBで使えたかな・・・

659 :656:2005/07/15(金) 21:10:10
>>657
レス有難うございます。

1. すみません。非表示にしたいのです。書き方が悪かったですね。すみません
2. ぐぐってるんですが中々ヒットしません。「VBA bat」などの気^ワードで調べてる
 んですけど。。。もうちょっと調べてみます。

有難うございました。

>>658
これは私宛のレスですか?高度なので意味が分かりません。ちょっと調べてみます。
有難う。

660 :デフォルトの名無しさん:2005/07/15(金) 21:10:57
WindowsのVBAで作ったマクロって、マックで使えますか?

661 :デフォルトの名無しさん:2005/07/15(金) 21:20:18
> 「VBA bat」などの
別にbatに限ったことじゃないでしょ。
普通に他のアプリに引数渡して起動する方法を調べればいいだけだよ。
まあ、1の方は回答貰うのは諦めよう。やりたければご自分で。

662 :デフォルトの名無しさん:2005/07/15(金) 21:56:35
>>661
心の広い人ですね。

663 :デフォルトの名無しさん:2005/07/15(金) 21:56:36
>>660
うん

664 :デフォルトの名無しさん:2005/07/15(金) 22:02:25
>>662
どうしたの、ボク?

665 :デフォルトの名無しさん:2005/07/16(土) 01:41:38
リファレンス的な本だとどれがお勧めですか?
心の広い人、教えてください

666 :デフォルトの名無しさん:2005/07/16(土) 01:56:59
ヘルプ

667 :デフォルトの名無しさん:2005/07/16(土) 02:19:33
心の広い人
と書けば、スレ違いの質問にも答えて貰えると思ってるのかな?

668 :デフォルトの名無しさん:2005/07/16(土) 07:50:32
>>665
あえて言うと、Office2000よりもOffice2003の方が
オンラインヘルプの仕上がりがよいみたい。

669 :今日も雑炊 ◆bKaGbR8Ka. :2005/07/16(土) 22:47:33
こんばんわ。おせわになります。



670 :今日も雑炊 ◆bKaGbR8Ka. :2005/07/16(土) 22:57:20
ファイル操作についてお教えください。
読み取り専用のままでファイルを配布して、ファイル名の変更など
されても読取専用のままにしたいのです。

実際にファイルをダブルクリックして開くのもマウスの左ボタンで
ファイルのプロパティからプロパティを変更するのもどちらも開くに
なるのでしょうか?プロパティから読み取り専用属性を変更したら
これはファイルを開いたことになるのでしょうか?



671 :デフォルトの名無しさん:2005/07/16(土) 23:27:36
>>670
君はこっちだ
http://pc8.2ch.net/pcqa/

672 :デフォルトの名無しさん:2005/07/17(日) 00:23:18
http://tmp5.2ch.net/tubo/

こっちだろ

673 :今日も雑炊 ◆bKaGbR8Ka. :2005/07/17(日) 00:26:41
(`・ω・´)プンプン!


674 :デフォルトの名無しさん:2005/07/17(日) 04:18:02
モジュール全体に対して比較モードを「テキストモード」に設定されている中、
「ひらがな」と「カタカナ」だけは区別したい場合ってどうすればいいんでしょう?

もしそれ用の関数等を作成しなければいけなかったりしたら死亡なんですが・・・。(;´Д`)


675 :デフォルトの名無しさん:2005/07/17(日) 12:27:39
ヘルプが英語で書かれている場合みなさんはどういう対処をしているのでしょうか?
教えてください。

676 :デフォルトの名無しさん:2005/07/17(日) 12:37:49
>>675
マルチ

677 :デフォルトの名無しさん:2005/07/17(日) 12:39:02
>>674
かなとカナが混じってる場合はどうする?

678 :デフォルトの名無しさん:2005/07/17(日) 12:42:22
マルチってどういう意味?

679 :デフォルトの名無しさん:2005/07/17(日) 13:35:08
糞厨房って意味さ

680 :デフォルトの名無しさん:2005/07/17(日) 14:39:59
>>679
なんだお前のことか(笑い)


681 :674:2005/07/17(日) 14:52:00
>>677
そっかー。ってっことはやっぱ関数作んないといけないってことですな。
ありがとー

682 :デフォルトの名無しさん:2005/07/17(日) 15:22:18
>>680
いや、おれのことだろ?

683 :デフォルトの名無しさん:2005/07/17(日) 19:32:22
実行を一時停止させる方法について質問なんですが、
・1/1000秒単位で指定できる。
・停止中CPUを喰わない
・停止中シートやユーザーフォームの操作が出来る
の3つを満たしてる方法って無いですか?

OnTimeやWaitは1秒単位だし、APIのSleepは操作が出来なくなる。
Timer関数を使ってループを組む方法はCPU喰いまくり。
何か他に良い方法は無いのでしょうか?

684 :cプログラマ:2005/07/18(月) 19:12:01
for文について
c言語:break →VBA:exit for だが
c言語:continue→VBA:???

continueってVBAではなんなの?


685 :デフォルトの名無しさん:2005/07/18(月) 19:15:23
>>684
ない

686 :cプログラマ:2005/07/18(月) 19:16:43
>>685
嘘だろ!?


687 :デフォルトの名無しさん:2005/07/18(月) 19:21:07
代用法ならあるけどね。

688 :cプログラマ:2005/07/18(月) 19:25:28
>>687
代用方おしえてちょ。

For cnt = 1 To 100
wkCelVall = Cells(cnt, 1).Value
If wkCelVall = "" Then
★★★ここでcontinueしたい!
Else
Cells(cnt, 1).Value = ""
End If
Cells(cnt, 1).Value = "aaa"
Next cnt



689 :デフォルトの名無しさん:2005/07/18(月) 19:36:57
goto

690 :cプログラマ:2005/07/18(月) 19:46:26
gotoと来たか。まさかとは思っていたが・・・
使うしかないか。

691 :デフォルトの名無しさん:2005/07/18(月) 19:50:35
>>688
つーか、その例通りなら、
If文ちょこっと弄るだけで済むやん。

つーか、Elseの場合
>Cells(cnt, 1).Value = ""
としても、直後に
>Cells(cnt, 1).Value = "aaa"
ってしてたら意味無くないか?

おまえ、本当にマなの?
それとも情報小出しにしてるとか?

692 :cプログラマ:2005/07/18(月) 19:55:17
>>691
例だよ。


693 :デフォルトの名無しさん:2005/07/18(月) 20:00:24
つまり情報小出しか

694 :デフォルトの名無しさん:2005/07/18(月) 22:52:52
GoTo Continue

695 :デフォルトの名無しさん:2005/07/19(火) 08:05:12
688 の例なら、IFをうまく使えばいいことになるな。

696 :デフォルトの名無しさん:2005/07/19(火) 19:03:22
スレ違いかも知れませんが、知ってる方がいたら、教えてください。
エクセルマクロで特定の文字列を置換し、セル中の置換後文字列のみを太字や斜体にしたいのですが。
セル全体は出来るようですが、一部分の変更が上手く出来ません。
また、置換後の文字列の長さは不特定なので、桁数指定も出来ません。
すみませんが、よろしくお願いします。

697 :デフォルトの名無しさん:2005/07/19(火) 19:19:51
>>696
ヒント:マクロの記録

698 :デフォルトの名無しさん:2005/07/19(火) 20:02:50
ヒント:このページをまねれ。ちなみにできたらうpよろ。
ttp://www.excel7.com/personal/personal1-4.htm#index21

699 :698:2005/07/19(火) 20:05:29
追記:このページは検索処理が乗っていた。置換処理にすると
ちょwwwww
よろ。

700 :デフォルトの名無しさん:2005/07/20(水) 12:40:19
>>688

C言語の事はよくわからんが

Exit Forじゃ、駄目なのか?(Forステートメントを途中で終了)

701 :デフォルトの名無しさん:2005/07/20(水) 12:47:46
ちなみに、VBAにはExit Doやら Exit Subやら Exit Function
End Ifとかある

On Error GotoやらResume,Resume Nestやら・・・
C言語にもあると思うが・・・

見当違いだったらスマン

702 :デフォルトの名無しさん:2005/07/20(水) 13:06:39
>>700
私は688じゃないけど、
continueは「一回だけ」下流の処理をとばして、次のFor〜Nextをまわす処理です。
Exit Forでは、For〜Next処理全体が終了するので、代用にはなりません。

703 :デフォルトの名無しさん:2005/07/20(水) 13:47:24
      For
      処理
┌──Exit For
│┌─continue
││  処理
│└→
│    next
└─→

704 :デフォルトの名無しさん:2005/07/20(水) 16:49:26
>>702
なるほど・・・VBAにはもしかしたらcontinueの代わりは無いかも

自分ならその場合は
If cnt <> 1 Then
とか
If wkCelVall = "" and cnt > 1 Then
とかでで切り抜けるかな・・・

705 :デフォルトの名無しさん:2005/07/21(木) 10:09:10
すみません。
ExcelVBAでArrayListを使いたいのですが、デフォルトではコンパイルが通りません。
アドインすればいいのかと思うんですが、ヘルプを読んでも、オブジェクトブラウザを
検索しても、ArrayListのキーワードではヒットせず、ぐぐっても、見つかるソースでは
当たり前のように使っているため、困っています。
何を引っ張ってくれば使えるようになるんでしょうか?
ご教授願います。

OSはWindows2000、Excel2003です。

706 :デフォルトの名無しさん:2005/07/21(木) 11:41:12
頼むから If 〜 Then は括弧で囲んでくれ・・・

707 :デフォルトの名無しさん:2005/07/21(木) 12:11:09
>>705
まず、ArrayListとはどう言った物かを
コードなりを踏まえて説明しないといけません。

>ArrayListのキーワードではヒットせず
私の頭の中でもヒットしません。
おそらく、誰の頭だろうがヒットしないでしょう。
……何か勘違いしてると思うよ。
君の中でのArrayListとは何か、まず説明しなさいって……

708 :デフォルトの名無しさん:2005/07/21(木) 12:31:21
ArrayListって.NETでしょ。
VBAで使えるなんて話、聞いたこともない。

個人的な自作関数名や変数名として
"ArrayList"という名前を使ってる奴とかは居るかもしれないけど。

709 :デフォルトの名無しさん:2005/07/21(木) 14:28:07
>>708
なるほど、じゃあ検索してヒットしたのは、多分.NETのサイトなんでしょうね。

とりあえずVBAでは使えないということが判ったのは助かった。
自作しますわ。

710 :デフォルトの名無しさん:2005/07/21(木) 20:07:59
検索してヒットするのはJavaはJScriptのようですが、、

711 :デフォルトの名無しさん:2005/07/22(金) 00:04:58
Outlook.ApplicationでメールアイテムのSentOnが取得できないのは
どんな場合でしょうか。

712 :デフォルトの名無しさん:2005/07/22(金) 09:58:06
rangeオブジェクトからブック名を知る方法を教えて

713 :デフォルトの名無しさん:2005/07/22(金) 10:21:28
特に指定しなかった場合はThisWorkbookでしょ。
ActiveCellやActiveSheet.Rangeの場合はActiveWorkbook。
別に調べるまでもないと思うが。

714 :デフォルトの名無しさん:2005/07/22(金) 16:28:13
EXCEL2000でコントロールIDを使って右クリックメニューに
値を貼り付け(369)や書式を貼り付け(370)を追加しているんですが
「罫線以外を貼り付け」にもコントロールIDがあれば教えてください


715 :デフォルトの名無しさん:2005/07/22(金) 18:57:54
自分で調べろ。
その二つが調べられるなら簡単だろ。

716 :デフォルトの名無しさん:2005/07/22(金) 20:00:06
あるの?

717 :デフォルトの名無しさん:2005/07/22(金) 20:20:06
な・い・しょ

718 :デフォルトの名無しさん:2005/07/22(金) 20:33:53
ExcelのVBAでprivate Subに一度に渡せる引数の数は
最大何個までになるんでしょうか?

719 :デフォルトの名無しさん:2005/07/22(金) 20:58:17
配列渡しできない?

720 :718:2005/07/22(金) 21:05:17
>>719
できないとして。

721 :物好き:2005/07/22(金) 22:10:17
わからないから教えてじゃ教える気にならんのはわかるし、スルーすべきなんだが・・・。
まあ、展開が嫌なので知らないの含めて答えると
>711
知りませんので答えるべきではないのですが・・・。
なぜ知りたいのかわからんのでなんともいえませんが
エラーになるメールのメールヘッダ調べれば分かるのでは?
>712
Rangeオブジェクトの親の親はWorkbookオブジェクト
まあ、713さんの答えであってるのですが返答がないので一応。
>714
ttp://www2s.biglobe.ne.jp/~iryo/2vba/sankou.html
にのってるな。まあ確かに調べればすぐわかります・・・。
>718
最大何個までかは知りません。
ただ、ParamArrayキーワードを使えば、何個だろうとかまわんはず。
XXをしたいのですが○○という条件があって・・・とか書けば返答できるけどなあ。
まあ、スルーすればいいのだが・・・。

何をしたいから、教えてくださいとか書かないし、
結果も書かないしなあ。分からんとしても調べた結果を書いてほしいと思う。
まあ日本人以外にそれを求めるのは・・・。

722 :デフォルトの名無しさん:2005/07/23(土) 00:21:11
日本人じゃないの?

カナーリ馬鹿な部類のほうだと思うけど

723 :デフォルトの名無しさん:2005/07/24(日) 11:53:18
すいません。>>711ですがどなたかご存知ないでしょうか。

724 :デフォルトの名無しさん:2005/07/24(日) 12:31:52
VBAなんですが、エラーが発生した行番号を知りたいときはどうすればよいので
しょうか。

on error goto〜だと、どこでエラーが発生したか分からないので不便です。
java とかみたいに、try catchみたいな構文ならいいのに。

725 :デフォルトの名無しさん:2005/07/24(日) 12:46:25
Erl

つーかtry catchも構文自体は、どこでエラーが発生したか
わからんけどな。

726 :デフォルトの名無しさん:2005/07/24(日) 20:25:15
文字列をDouble型に変換するってどうすればいいのですか?
整数みたいにCIntとかないみたいなんですが。

727 :デフォルトの名無しさん:2005/07/24(日) 21:06:08
ちょっと気になったのですが、VBA.NETってないんですか?
今ないなら、今後出るということはないのですか?

728 :デフォルトの名無しさん:2005/07/24(日) 21:37:46
今は無い。
今後のことはMSに聞け。

729 :726:2005/07/24(日) 22:08:51
>>728
ないんですか?
自作しないといけないんでしょうか?

730 :デフォルトの名無しさん:2005/07/24(日) 22:31:32
>>729
あなたは、一体何者ですか・・・
>>728
ありがとうございました。

731 :デフォルトの名無しさん:2005/07/25(月) 07:15:11
>>726
探したらすぐ見つかったぞ。
ここで質問するよりぐぐった方が早いと思うんだがな。

ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E5%A4%89%E6%8F%9B+Cint+Double&num=50

732 :デフォルトの名無しさん:2005/07/25(月) 07:20:34
>>731
お前らの回答が遅いから結果的にはそうだな。

733 :デフォルトの名無しさん:2005/07/25(月) 07:28:50
はいはいわろすわろす

734 :デフォルトの名無しさん:2005/07/26(火) 01:48:14
同じ形式の複数のデータファイル(xls)があります。
それを1つのファイルにまとめたいんですが、本を読んでもさっぱりわかりません。

具体的には1つのファイルに、縦に位置をずらしながら他のデータをコピー&ペーストしたいのです。

ヒントでもかまわないのでよろしくお願いします。


735 :デフォルトの名無しさん:2005/07/26(火) 02:07:47
>>734
1.ファイルを開く
2.コピーする
3.貼り付けする
4.ファイルを閉じる
5.1に戻る


736 :デフォルトの名無しさん:2005/07/26(火) 02:27:10
>>735
即レス感謝でつ。
でも2.でコピーするファイルと3.で貼り付けるファイルが違うんですよね。
あとそこがわかればなんとかなりそうです。

737 :デフォルトの名無しさん:2005/07/26(火) 02:38:02
Excel.Workbook
Excel.Worksheet

738 :デフォルトの名無しさん:2005/07/26(火) 07:08:52
>>736
無礼すぎ

739 :デフォルトの名無しさん:2005/07/26(火) 07:11:02
すみません。少しスレ違いかもしれませんが
複数のエクセルファイルをドラッグアンドドロップして
いずれのファイルからも特定のセル
(例えば5枚目のシートのE12みたいに)
からデータを拾ってきて、1つのエクセルファイルに
出力するようなツールを作りたいのですが
そういうのってAccessで実現できるのでしょうか?
また、出来るとしたらどうすればいいのでしょうか?
よろしくおながいします。

740 :デフォルトの名無しさん:2005/07/26(火) 07:12:09
すみません。少しスレ違いかもしれませんが
複数のエクセルファイルをドラッグアンドドロップして
いずれのファイルからも特定のセル
(例えば5枚目のシートのE12みたいに)
からデータを拾ってきて、1つのエクセルファイルに
出力するようなツールを作りたいのですが
そういうのってAccessで実現できるのでしょうか?
また、出来るとしたらどうすればいいのでしょうか?
よろしくおながいします。

741 :デフォルトの名無しさん:2005/07/26(火) 09:42:10
初心者です。
本をみながらマクロを書きブックに戻って実行したら
デバッグとなり黄色くなってしまいました。
しかも消えない。
た す け て

742 :デフォルトの名無しさん:2005/07/26(火) 10:02:02
>>741
それはマクロにエラーがあるってことだ。
メニューの「実行 > リセット」で元には戻るけど
コードを見てない俺等では、エラーが出ないようにする方法は教えられない。

743 :デフォルトの名無しさん:2005/07/26(火) 12:51:47
>>742
ありがとうございます。
リセットできました。
ダブルクォーテーションとか()って、大文字小文字は正確に
打たないとだめですよね。
みなさん、いちいち「半角全角」キー押すの
めんどくさくないですか?
慣れちゃえば身体が自然に動くんですか?

744 :デフォルトの名無しさん:2005/07/26(火) 13:29:41
大文字小文字は関係ないだろ。
全角半角の間違いじゃねーか?

俺は日本語文字列入れるところはNullのままにしておいて
後から入力することが多いな。
1. msgbox "",vbokonly,""
2. IME ON
3. msgbox "おはよう",vbokonly,""
4. msgbox "おはよう",vbokonly,"あいさつ"
みたいな感じで。(この場合vbokonlyは省略できるけど)


745 :デフォルトの名無しさん:2005/07/26(火) 20:01:09
>>744
ありがとうございました。
ナイスな方法ですね。
わたしもそのやり方でやってみます。
が、初心者なのでまとめて後入力だと
日本語で何を入れるのか忘れそうで恐い。


746 :デフォルトの名無しさん:2005/07/26(火) 20:39:31
その前に日本語を忘れてしまいそうです

747 :デフォルトの名無しさん:2005/07/28(木) 19:32:57
初心者なのでVBAをやるためにどんなPCを買えば良いかも教えて下さい。
ついでにどこで買うのが安く、しかも初心者にも優しいのか教えて下さい。
皆さんはどんな風に勉強したんですか?初心者にも分かりやすく教えて下さい。
よろしくお願いします

748 :デフォルトの名無しさん:2005/07/28(木) 19:49:53
> 初心者なのでVBAをやるためにどんなPCを買えば良いかも教えて下さい。
今売ってるWinかMacなんでもOK
Pen 66MHz RAM16MBなんてPCでも、普通にVBA使えるから

> ついでにどこで買うのが安く、しかも初心者にも優しいのか教えて下さい。
VBA関係ないのでスレ違い

> 皆さんはどんな風に勉強したんですか?初心者にも分かりやすく教えて下さい。
「解らなければ人に聞けばいい」という考え方を捨てることが勉強の第一歩です

以上
あとは勝手にがんがれ

749 :デフォルトの名無しさん:2005/07/28(木) 19:58:36
>>748
ちゃんと>>747を適切なスレに誘導してあげるのも優しさだぜ

http://pc8.2ch.net/test/read.cgi/prog/1121498900/

750 :デフォルトの名無しさん:2005/07/28(木) 20:00:41
>>749
そこは夏厨じゃない奴が夏厨になりきって遊ぶスレだぜ
本物の夏厨を誘導してどうするw

751 :デフォルトの名無しさん:2005/07/28(木) 20:02:02
ヒント:ここは釣り堀

752 :デフォルトの名無しさん:2005/08/02(火) 22:48:45

CrystalReport で、明細部分を繰り返し印刷することが
できますけど、Access VBAのフォームにも同様の機能
があるんでしょうか?

現在、Access VBAの業務系ソフトをVB.NETに移植
しようとしているのですが、VBAの方で、ひとつの
レコードが複数の行に渡って記載されているリスト
コントロールのような表示になっておりまして、
これをどうやって移植したらいいのかと思っています。

これはAccess VBA独自のコントロールなのでしょうか?
VB.NETでは使えませんかね?


753 :デフォルトの名無しさん:2005/08/04(木) 12:18:36
ExcelVBAよりバッチファイルを実行したいのですが、
うまくいきません_| ̄|○

Dim oShell As Object
Dim oExec As Object
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("C:\test.bat")

教えてください
|ω・`)

754 :デフォルトの名無しさん:2005/08/04(木) 12:26:13
call shell("C:\test.bat")

755 :デフォルトの名無しさん:2005/08/04(木) 12:31:59
即答・・・
ありがとうございます!!(´∀`)

756 :デフォルトの名無しさん:2005/08/04(木) 19:45:56
Excel2003で文字列の中に半角カタカナが含まれてるかどうが
判定したいんですが、どういう感じで書けば可能でしょうか?

757 :デフォルトの名無しさん:2005/08/04(木) 20:52:41
文字列 Like "*[ヲ-ン]*"

半角カナが含まれてればTrue
含まれてなければFalse
になると思うが。

758 :デフォルトの名無しさん:2005/08/08(月) 18:38:47
すいません。
教えてください。

任意のExcelブックのシートに図が一枚だけ貼りつけられているのですが、
その図を削除したいため、オブジェクト名を取得したいのですが、
どのようにすれば取得できるのでしょうか?

ActiveSheet.Shapes(XXXXXXXX).Select
Selection.Delete


759 :デフォルトの名無しさん:2005/08/08(月) 18:59:51
ActiveSheet.Shapes(1).Delete

760 :デフォルトの名無しさん:2005/08/08(月) 19:00:57
あ、名前の取得は↓ね。
ActiveSheet.Shapes(1).Name

761 :758:2005/08/08(月) 19:54:57
ありがとうございます!!
(*´Д`)

762 :デフォルトの名無しさん:2005/08/10(水) 12:10:47
word2002/2003を使用しています。

自分でコマンドバーを新しく作る方法は分かったのですが、
そこにオートシェイプの「直線」と「四角形」のボタンを追加する方法が分かりません。

どなたか教えてください。

763 :デフォルトの名無しさん:2005/08/10(水) 13:00:24
普通にやれば出来る

764 :デフォルトの名無しさん:2005/08/10(水) 13:36:30
VBAに関係したことなのか。

765 :デフォルトの名無しさん:2005/08/10(水) 13:45:42
>>762
Excel総合相談所 36
http://pc8.2ch.net/test/read.cgi/bsoft/1121686643/

こっちの住民は寒気がするくらい優しいぞ。

766 :762:2005/08/10(水) 13:50:39
wordなんすけど。

767 :デフォルトの名無しさん:2005/08/10(水) 13:55:25
>>766
大丈夫。Wordの質問でもちゃんと答えてくれるはずだって。

768 :デフォルトの名無しさん:2005/08/10(水) 14:05:12
>>767
いや、そのスレ最近イイふいんきだけど、さすがにそこまで甘くないだろ。
それに前スレでもそうだったけど、偶にものすごく荒れるし。

769 :デフォルトの名無しさん:2005/08/10(水) 17:21:03
>>762
ほんとの事を言うと、
あなたの質問に答えられるほど、
ここの住人はレベルが高くないんです。

だれも模範解答を提示できないから、
なんだかんだとお茶を濁すぐらいしかすることがない。

770 :デフォルトの名無しさん:2005/08/10(水) 17:37:47
>>769が真実を言っちゃった><;

771 :デフォルトの名無しさん:2005/08/10(水) 17:40:42
全ての人が自分と同じレベルだと思わない方がいい

それとID出ないからといって自演はほどほどに

772 :デフォルトの名無しさん:2005/08/10(水) 19:04:23
>>766

468 名前:名無しさん@そうだ選挙にいこう[sage] 投稿日:2005/08/10(水) 17:55:32
>>466
「ユーザー設定」ダイアログを表示した状態で、分類「オートシェイプ」
を選ぶ。後はそこに表示される「直線」だの「四角形」などのボタンを、
自作のツールバーにドラッグ&ドロップ。

773 :デフォルトの名無しさん:2005/08/11(木) 15:26:02
VBAって基本的な部分は97から変わってないですか?
97の参考書買おうと思うんですけど

774 :デフォルトの名無しさん:2005/08/11(木) 15:30:20
基本的な構文規則とかは変わってないけど
関数とかメソッドとか結構増えてるよ

というか、今頃97対応版買っても仕方ないと思われ
最低でも2002、できれば2000〜2003対応のを買え。

775 :デフォルトの名無しさん:2005/08/11(木) 18:55:06
そうなんですか
ありがとうございます

776 :デフォルトの名無しさん:2005/08/14(日) 23:49:52
Excel2003です。お教えください。
練習問題みたいのを(例えば新規ブックを開く、とか)ツールバーに登録しています。
それで新たに作ったプロシージャをいつものように登録したんですが
「マクロ 'PERSONAL.XLS!セルA1の値を取得、表示する' が見つかりません。」
とアラートが出てしまいます。
ただし、VBEの中から
実行>Sub/ユーザーフォームの実行
を行うとアクティブシートのA1の中身を表示します。
また、以前作ったものを新しいボタンに登録すると、例えばアクティブシートを削除、ならその通りに動きます。

一体なにがいけないのでしょうか?
よろしくご教示ください。よろしくおねがいします。

777 :デフォルトの名無しさん:2005/08/15(月) 08:55:55
>>776
Excel総合相談所 36
http://pc8.2ch.net/test/read.cgi/bsoft/1121686643/

778 :デフォルトの名無しさん:2005/08/15(月) 20:20:54
>>777
了解です、誘導ありがとうございました。

779 :デフォルトの名無しさん:2005/08/16(火) 09:55:21
みなさんこんにちは、
OfficeXP DeveloperでCOMアドインの作成にチャレンジしているのですが、これはいったい?
と思う出来事に困っています。

AddinInstance_OnConnection時にUserFromを表示させるようにコードを書いたところ。
スタートボタンからExcelを起動したときは問題ないのですが、関連付けられた「*.xls」ファイルを
ダブルクリックして起動した場合は、UserFormを閉じた後ワークシート上でのキーボードの入力を
まったく受け付けなくなってしまって困っています。Altによるメニューの表示や、セルを
ダブルクリックした後のデータ入力等は可能ですが、それ以外はまったくキー入力が
無視されてしまいます。(方向キーによる選択セルの移動や、セルへの直接データ入力、
Ctrl+PgUpによるシートの表示切替など)これって回避できるのでしょうか?


780 :デフォルトの名無しさん:2005/08/16(火) 10:08:06
>>779
>男の顔が突然歪んだ。それに合わせるように、その腰の動きが単調で乱暴になり、そしてより激しくなっていく。

まで読んだ

781 :デフォルトの名無しさん:2005/08/16(火) 10:13:06
>>779
> 自分の一番深い所で男の精液が爆発した瞬間、キャミィは目を剥きながら心の中だけで絶叫した。
まで読んだ。

782 :デフォルトの名無しさん:2005/08/16(火) 18:37:22
>>779
> 突然、「ひっ。」と妻の声が中からしました。今から思えばきっとこの時パン

まで読んだ。

783 :デフォルトの名無しさん:2005/08/17(水) 01:32:55
>>780-782
おまいら、、、、たのむよ〜

784 :デフォルトの名無しさん:2005/08/17(水) 09:37:11
Excel2000です IEコンポーネントなのですがこちらでよかったでしょうか?

伺いたいのはIEコンポーネントでフレーム(2つに分かれています)のあるページを開いているのですが、
どちらか片方のページが開いたら次の処理を行う
ということをしたいのです(もう一方のページが開くのがすごく遅いのでその間に別の処理をしてしまいたい)

IE.Busy が終わるのを待っていると両方共のページが開くのを待たないといけませんが
片方が開いたというのを分かる方法はありますでしょうか?
フレームのページは自分で作っていますので、IE.document.frames("namae") みたいな感じになっています

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

785 :デフォルトの名無しさん:2005/08/17(水) 10:26:55
>>784
>>777

786 :デフォルトの名無しさん:2005/08/17(水) 11:09:55
どっちかっつーとこっちだな

VBプログラマ質問スレ(6.0以前) Part43
http://pc8.2ch.net/test/read.cgi/tech/1123952677/


787 :デフォルトの名無しさん:2005/08/17(水) 16:44:09
ほんとにあほみたいな質問なんですが、お答え願えるでしょうか。
商品A コメント 100円

商品A
コメント
100円
という風に別ブック別シートに並べたいのですが分からなくて弱ってます。
Sub xxx()
Dim myOriginal As Integer
Dim myCopy As Integer
  For myCopy = 1 To 3
For myOriginal = 1 To 3
Cells(5, myCopy).Value = Cells(myOriginal, 1).Value
Next myOriginal
Next myCopy
End Sub
なんとなくこんな感じの入れ子になるような気はするのですが、どこが間違ってますでしょうか?
教えていただけませんか、お願いします。

788 :デフォルトの名無しさん:2005/08/17(水) 17:12:02
なんとなくできました!
myOriginal = 1
For myCopy = 1 To 3
Cells(myCopy, 5).Value = Cells(1, myOriginal).Value
myOriginal = myOriginal + 1
Next myCopy
ここから改良するつもりです。お騒がせ致しました、すみません。

789 :デフォルトの名無しさん:2005/08/17(水) 18:30:00
>>784
WSHスレの方が詳しいような気がするけど、どこに持っていってもそれに詳しい人を待たないといけないかな。
前はIEコンポのスレがあったんだけどね。

790 :デフォルトの名無しさん:2005/08/17(水) 18:45:11
すみません、教えて下さい。
Dimステートメントで定義した、2次元配列を、
1次元目をキーにソートしたいのですが、可能でしょうか。
よろしくお願いします。


791 :デフォルトの名無しさん:2005/08/17(水) 18:56:56
>>790
可能
といっても一発でソートするようなメソッドとかが有る訳じゃない。
VB、VBAにはソート機能は無いので、ソートの汎用アルゴリズムを使うか
ソート可能なコントロールを使い、そのコントロールのメソッドでソートするかだな。

VBAの場合、二次元までの配列をソートする一番簡単な方法は
シートに書き出してオートする方法。だが、これを嫌う奴は多いので、
これがイヤなら自分で書け。
といっても腐るほどサンプルが転がってるから苦労はしないと思うが、
サンプルくらい自分で拾ってこいよ。

792 :デフォルトの名無しさん:2005/08/17(水) 18:59:49
一発でソートできる方法ってなかったけ?
97以前のメソッドの名残を使える方法があったような。
時間がないので調べてないけど。

793 :デフォルトの名無しさん:2005/08/17(水) 19:12:54
Excelのマクロについて質問です

Sheet2のみ、Sheet3のみの内容をコピーし、新規のbookを作成し、そこにペーストする方法はわかる
のですが、Sheet2からSheet5までをまとめて新規のbookにペーストする方法がわかりません

どなたかよい記述方法をアドバイスしていただけないでしょうか

794 :デフォルトの名無しさん:2005/08/17(水) 19:16:47
まとめてやろうとするからできないんだよ。
処理を個別にしてループ回せばいいだけのことなのに。

795 :793:2005/08/17(水) 19:23:47
>>794
やはりそれが一番ですか
アドバイス有難うございます



796 :デフォルトの名無しさん:2005/08/18(木) 15:14:28
Excelマクロ(VBA)について質問です。
処理実行後、エクセル自体を終了させたいのですが、
ActiveWorkbook.Close SaveChanges:=False
ActiveWindow.Close SaveChanges:=False
のどちらを試してみても、エクセルブックは閉じるのですが、
エクセル自体は終了してくれません。(ブックが何も無い状態でアプリがそのまま残っている)
恐らく、アプリ自体を終了するような方法があると思うのですが、
調べ方が足りないのか、方法が見つかりません。
どなたかご指導をお願いします。

797 :デフォルトの名無しさん:2005/08/18(木) 15:20:07
Application.Quit

798 :796:2005/08/18(木) 16:03:31
>>797
ありがとうございます。m(_ _)m
とりあえず、アプリを終了する事はできそうですが、
「保存しますか?」のアラートが出てしまいます。(保存はしたくありません)

ActiveWindow.Close SaveChanges:=False
Application.Quit

と2段階で行う事も試しましたが、
ワークブックを閉じた段階で、次の命令文が実行されないみたいで、
(当然といえば、そうなのかもしれませんが)
結局、前と同じ状況(アプリは終了しない)になってしまいます。

何か、良い方法ってないのでしょうか?

799 :デフォルトの名無しさん:2005/08/18(木) 16:10:33
Personal.xls

つーか聞くことしか考えてないの?
Application.Quitだって「VBA "Excelを終了する"」とかでググれば腐るほど出るぜ。
ちっとは自分でやる気になってみろよ

800 :796:2005/08/18(木) 16:27:52
>>799
申し訳ないです。
これでも昨日から、ググりつついろいろ試していたのですが・・・
検索の仕方が悪く、前段階では Application.quit すら見つかりませんでした。
※ 例に挙げたワークシートやウィンドウの閉じる方法しか見つかりませんでした。

とりあえず、Personal.xls 試してみます。

801 :デフォルトの名無しさん:2005/08/18(木) 19:13:56
>>798
逆にする。

Application.Quit
ThisWorkbook.Close SaveChanges:=False

802 :デフォルトの名無しさん:2005/08/18(木) 21:12:43
Application.DisplayAlert = Falseだっけか?
慣れてる人ならまだしも、ネットで全部済ますのは無理があると思うよ

逆引き大全の類は1冊持っておいた方がいいと思う

803 :デフォルトの名無しさん:2005/08/21(日) 16:31:31
ユーザーフォーム上のコンボボックスを2段式にして、2段目のRowsouceを変数を使って制御したいのですが上手く行きません。
ご指導お願いします。

Public Sub UserForm1_Initialize()
Public あ As Long, あ範囲 As Range
Set あ = Worksheets("シート1").Range("A65536").End(xlUp).Row
 Set あ範囲= "シート1!B2:B" & あ
End Sub

Private Sub ComboBox1_Change()
Dim う As Integer
With UserForm1
.ComboBox2.Text = ""
う = .ComboBox1.ListIndex
Select Case う
Case 0
.ComboBox2.RowSource = "シート1!A2:A10"
      Case 1
.ComboBox2.RowSource = あ範囲
End Sub

804 :デフォルトの名無しさん:2005/08/21(日) 19:53:26
>>803
Excel総合相談所 36
http://pc8.2ch.net/test/read.cgi/bsoft/1121686643/

805 :デフォルトの名無しさん:2005/08/22(月) 10:37:11
VBAでネットゲームの自動化をしたいんですが参考に出来るサイトや書籍を教えてください

806 :デフォルトの名無しさん:2005/08/22(月) 10:40:23
なぜVBAで寝マクロを……

807 :デフォルトの名無しさん:2005/08/22(月) 10:58:16
とあるスレで
243 名前:ネトゲ廃人@名無し 投稿日:2005/08/17(水) 20:00:25 ID:???
オレはVBAで!
244 名前:ネトゲ廃人@名無し 投稿日:2005/08/17(水) 20:31:41 ID:???
>>243
おお、同士よ
オレもExcelでVBAさ
データ類は別ファイルとかにしなくてもシートに置いておけるし便利だよね
今日もExcelで造船マクロさ
245 名前:ネトゲ廃人@名無し 投稿日:2005/08/17(水) 20:48:35 ID:???
クォリティタカスwwwwwwwwwwwwwwwwwww

ってなレスが有りまして・・・VBAで作れば一番上手いと思った次第です


808 :デフォルトの名無しさん:2005/08/22(月) 11:15:02
> VBAで作れば一番上手いと思った次第です

それはVBAを使いこなせる奴が言う台詞だ。
つーかそのスレ、レベル低すぎ。

まあ一番参考になるサイトはGoogle
コレをもって他は無い
後々楽したいなら、あとは自分でがんばれ

809 :デフォルトの名無しさん:2005/08/22(月) 11:30:28
>>880
ここまで聞いたら駄目かも知れないですけど、どのような検索ワードを入力すれば宜しいでしょうか?
MMO マクロ 作成 VBA ネットゲームとか色々試して居るんですが一向に出てきません

810 :デフォルトの名無しさん:2005/08/22(月) 11:45:27
いきなり寝マクロ作る気かよ
図々しいにも程がある

いくらVBが使えるだけじゃマとは呼ばれないってほど簡単な言語でも
寝マクロなんてのは素人がいきなり作れるものじゃない
汎用的なプログラミングの基礎から始め、VB(VBA)の構文規則や
関数、メソッドなどの基礎をちゃんと勉強しろ

構文規則はVB(6以前)もVBAも同じだから、VB6の入門サイトでも見てこい
とりあえず言語関係全く未経験なら「Visual Basic中学校」あたり行け

811 :デフォルトの名無しさん:2005/08/22(月) 17:33:35
VBAで通信制御するとなるとADO.NETとかつかうかもな・・・

でもその前にVBAの基本事項やら構造やら理解しないとなぁ

812 :デフォルトの名無しさん:2005/08/22(月) 18:47:24
いや、タイミング合わせてsendkeyするだけだ。

813 :デフォルトの名無しさん:2005/08/22(月) 18:58:34
何その最低マクロ

814 :デフォルトの名無しさん:2005/08/23(火) 13:07:02
>>803
もうちょっとしっかり勉強したほうがいいよ。
構文がめちゃめちゃ。

Sub UserForm1_Initialize()
ではInitializeイベントが成立しない。
1がいらない。

他も間違ってるところばかりで書ききれん。

全コード書け、って言うのは勘弁して欲しいので、
自分できっちり勉強しなおしてね。

815 :デフォルトの名無しさん:2005/08/31(水) 21:48:15
age

816 :デフォルトの名無しさん:2005/09/01(木) 18:07:40
データの集計で、データ入力シートと集計シートがあります。
入力シートにデータを入れると、集計シートで計算をしてくれるため、集計シートには保護をかけたいと思っています。
そして、そのファイルをネットワークで共有したいと思っているのですが、一人がデータを入力した時、
他の人はExcelを閉じずに、更新ボタンを押せば集計シートを更新できるようにしたいのですが、どのようにすればいいでしょうか?
入力と集計でファイルを分ければいいような気もするのですが、使いまわしたいので、できれば内容にフルパスを
入れたくありません。
ちなみに、データを入力する人間は原則一人です。
よろしくお願いします。

817 :816:2005/09/01(木) 18:15:05
すみません、環境を書いてませんでした。
Excel2000で実現できないかな、と思っています。
できれば1ファイルで完結すればいいのですが。

818 :デフォルトの名無しさん:2005/09/01(木) 22:51:29
質問です
A1からF1に入力項目があって、A1からF1まで全て入力済みなら灰色で塗りつぶして
A1からF1のどこか一つでも未入力箇所があると塗りつぶしなしをする

このようなマクロを作成したいのですが初心者なもので・・・教えていただけないでしょうか。

819 :デフォルトの名無しさん:2005/09/01(木) 22:57:15
>>818
何を持って入力されたと看做すのか。とにかく何か文字が入っていればそれで良いのか
自分で条件をまとめなされ。

820 :デフォルトの名無しさん:2005/09/01(木) 23:15:09
とにかく文字が入っていれば入力済みとなるようにです

821 :デフォルトの名無しさん:2005/09/01(木) 23:16:19
818はマルチ

822 :デフォルトの名無しさん:2005/09/01(木) 23:19:11
>>821
どっちに書いたらいいのかわからんかったから両方書いただけ

823 :デフォルトの名無しさん:2005/09/01(木) 23:28:25
人、それをマルチと呼ぶ

824 :818:2005/09/02(金) 00:00:12
解決しますた。アリガトン

825 :デフォルトの名無しさん:2005/09/03(土) 13:01:38
教えてください

例えば、テキストファイルで「あ」と入力したものをバイナリエディタで開くと
16進数で「82A0」と表示されます。
この16進数コードから「あ」を、VBAを使って生成したいのですが、どうすればよいでしょうか。
VBAだと、unicodeならchr関数でキャラクタへ変換できますが、16進数からキャラクタへの変換がわかりません。
よろしくお願いします。


82A0 → あ
2バイトの16進数を変換してキャラクタを生成

826 :デフォルトの名無しさん:2005/09/03(土) 13:20:11
>>825
Function hoge(code As String) As String
hoge = Chr(Val("&H" & code))
End Function


827 :825:2005/09/03(土) 19:13:01
>>826
こんなに早くレスしていただきありがとうございます!
お陰で解決しました。

828 :ゆみ:2005/09/06(火) 01:26:58
パワーポイントとワードのファイルがどのバージョンのオフィスで作成されたか調べたいのですが
VBAでそれは可能でしょうか?

829 :デフォルトの名無しさん:2005/09/06(火) 01:44:21
>>828
可能だけどネカマには教えたくない。

名前欄や本文で女っぽい名前を書く奴はほとんどネカマという法則があるからね。
(ほとんどの奴は否定するけど、指摘されてすぐ肯定するくらいなら騙りなんてやらないだろうし)
相手が男でも回答はするけど、俺はネカマの質問には答えない。

830 :デフォルトの名無しさん:2005/09/06(火) 01:58:01
だったらスルーすればいいものを。
何か嫌なことでもあったのか。
しかも教えたくないと言いつつ可能だ、と答えてるし。

831 :デフォルトの名無しさん:2005/09/06(火) 02:03:39
>>830
スルーすればいいものを。
何か嫌なことでもあったのか。

832 :デフォルトの名無しさん:2005/09/06(火) 02:21:04
>>831
スルーすればいいものを。
何か嫌なことでもあったのか。


833 :デフォルトの名無しさん:2005/09/06(火) 02:33:06

for ResNo = 832 To 999
 call SendRes(">>" & ResNo & vbcrlf & "スルーすればいいものを。" & vbcrlf & "何か嫌なことでもあったのか。")
next ResNo

834 :デフォルトの名無しさん:2005/09/06(火) 02:34:56
>>833
スルースルスルスルスルルー
何か嫌なことでもあったんた!!!WWW

835 :デフォルトの名無しさん:2005/09/06(火) 02:54:42
>>833
君合格

836 :833:2005/09/06(火) 03:00:20
これで合格なのか?
変数は宣言しろとか定型文は定数使えとか
SendResプロシージャも書けとか言われるかと思った

837 :ゆみ:2005/09/06(火) 22:21:50
ありがとうございました。
具体的にはどのようにすればいいのでしょうか?
Appkication。Version とかBuildではアプリのバージョン番号が取得されてしまいます・・・

838 :デフォルトの名無しさん:2005/09/06(火) 22:29:36
>>837
とりあえずおっぱいうpして

839 :1:2005/09/07(水) 01:11:26
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね
ほとんどネカマという法則があるからね

840 :デフォルトの名無しさん:2005/09/07(水) 07:04:38
>>839
とりあえずおっぱいうpして

841 :ゆみ:2005/09/07(水) 22:48:30
MSDNを探してみたのですがやはりわかりませんでした。
教えていただけないでしょうか?

842 :デフォルトの名無しさん:2005/09/07(水) 23:13:22
>>841
>>838

843 :デフォルトの名無しさん:2005/09/08(木) 00:07:34
一方のパソコンからもう一方パソコンにあるVBマクロをブラウザ経由で
実行させたいのですが、どのようにすれば宜しいのでしょうか。
google等で検索したのですが、ヒントになるサイトがありませんでした。
板違いでしたら、申し訳御座いません。
具体的には、下図のパソコンAがパソコンBのVBマクロを実行する方法です。
HTMLとVBAのソース、少しは読むことができます。

<条件>
(パソコンA)--(プロバイダ)--(パソコンB)

・パソコンAはブラウザ起動済み
・パソコンBはブラウザとエクセル起動済み
・パソコンAとBはLAN経由でインターネットに繋がっています。
・パソコンAとBは上記プロバイダにある同じコンテンツを参照しています。

844 :けいこ:2005/09/08(木) 00:10:57
>>843
可能だけどネカマには教えたくない。

名前欄や本文で女っぽい名前を書く奴はほとんどネカマという法則があるからね。
(ほとんどの奴は否定するけど、指摘されてすぐ肯定するくらいなら騙りなんてやらないだろうし)
相手が男でも回答はするけど、俺はネカマの質問には答えない。

845 :デフォルトの名無しさん:2005/09/08(木) 00:21:03
パソコンBはWebのコンテンツを常に監視し続ける。
パソコンAからWebに命令を書き込み。
パソコンBはWebの命令を読み込み実行する。

こんなプランでどうよ?

846 :デフォルトの名無しさん:2005/09/08(木) 00:28:42
つ[VNC]

847 :デフォルトの名無しさん:2005/09/08(木) 00:36:08
>>846
それが一番楽だなw

848 :843:2005/09/08(木) 00:48:02
843です。
言葉足らずですいません。
パソコンAがもし、フルブラウザ参照可能な携帯電話の場合、
HTMLの記述はどうすれば良いのでしょうか。

検索して、下記サイトを参照しました。
http://www.tohoho-web.com/lng/199806/98060072.htm

試しに、デスクトップにあるマクロを起動したExcelファイルを立ち上げ、
HTMLファイルに上記サイトの
<a href="./ExcelFile/test.xls">Excelファイル実行</a>
を参考にして、実行したところ、Excelファイルの
ダウンロードまたはファイルを開くのポップアップが表示されてしまいました。

849 :デフォルトの名無しさん:2005/09/08(木) 03:17:27
誰か暇だったら教えて

調べてもわからんかったのだけど、
Subとかで引数って、いくつまで渡せる?

もしかして、10個で限界とかある?


850 :デフォルトの名無しさん:2005/09/08(木) 03:30:39
単純に「sub hoge(arg1,arg2,arg3…」と渡すなら60個まで
でもそれ以上の引数を渡す方法もいろいろある。
まあ、大抵は60個じゃ足りなくなることはないので
それらの方法は別の用途で使われるんだけどね。
興味があるなら自分で調べよう。

851 :849:2005/09/08(木) 03:39:42
>>850
クラスモジュールのSubなんだけど、、
12個だとエラーでて11個にしたら、通ったぽい

でも、60個か...
おかしいなー
やっぱり他のミスが内在してるのかもしれないな

とりあえず、助かりました
さんくす

852 :ゆみ:2005/09/08(木) 10:02:57
>>828 の質問、お願いします

853 :デフォルトの名無しさん:2005/09/08(木) 11:07:41
>>852
とりあえずおっぱいうpして

854 :デフォルトの名無しさん:2005/09/08(木) 13:39:32
Excel2003 での VBA について質問があります。

Excel の Visual Basic Editor でプログラムを書き、同じく
Editor 環境の「Sub/ユーザフォームの実行」でプログラムを実行し、
こちらは常にうまく動作します。

一方、Excel のシートの方に「マクロの実行」ボタンがあるのですが、
こちらからはそのプログラムを起動できる場合とできない場合があります。

できる場合は問題ないのですが、できない場合、
「マクロ」ウィンドウが出てプロシージャ名が表示されるのですが、
「実行ボタン」が無効のままでプログラムが起動できないのです。

このような現象はよくあることなのでしょうか?
また、その原因を御教授頂けないでしょうか?

855 :854:2005/09/08(木) 13:46:22
どうもプロシージャ名の「ex1」というのが悪さをしてるようで、
プロシージャ名を変えたらシートからでもうまく起動するようになりました。
「ex1」というのは予約語と衝突するとか、何か問題があるのでしょうか?

856 :デフォルトの名無しさん:2005/09/08(木) 13:49:43
どうやら A1 形式の EX1 セルを参照してしまっているようでした。
スレ汚し失礼しました。

857 :デフォルトの名無しさん:2005/09/09(金) 00:21:44
質問です OS XP SP1 EXCEL2002
シートをPDFに変換するためにPSプリンタでシートをPOSTScriptファイルに出力し
POSTScriptファイルをPDFに変換するという手順を踏んでいるのですが

Call Worksheets("Sheet2").PrintOut(, , , False, "(Generic PostScript Printer)", True, , "c:\test.ps")

でPOSTScriptファイルは出力されるのですがPOSTScriptファイルがよく文字化けしてしまいます。
そのため出力されたPOSTScriptファイルはPDFに変換できません。
プログラムではなく人間が手動でPSプリンタを使ってPOSTScriptファイルを出力させると文字化けをすることはありません。
どうして文字化けを起こしてしまうのでしょうか?

858 :デフォルトの名無しさん:2005/09/09(金) 07:19:00
>>857
Excel総合相談所 37
http://pc8.2ch.net/test/read.cgi/bsoft/1125178942/

859 :デフォルトの名無しさん:2005/09/09(金) 12:59:43
質問です.
2つのCSVファイルを指定して比較し、その差分をC:\tmp\差分.csvに出力
 させるにはどのようなプログラムにすればよいのでしょうか?


860 :デフォルトの名無しさん:2005/09/09(金) 13:23:22
>>859
二つのcsvを二つの二次元配列に読み込んで
ループ回して比較して、比較結果で条件分岐させて書き出せばいいじゃん。
ここは「コード書いてください」スレではないので具体的なコードは自分で書こうね。

861 :デフォルトの名無しさん:2005/09/09(金) 13:37:58
>>859
Excel総合相談所 37
http://pc8.2ch.net/test/read.cgi/bsoft/1125178942/

862 :デフォルトの名無しさん:2005/09/09(金) 13:49:55
向こうが無用に荒れる原因になるので
Excel総合相談所への誘導は止めなさい。

っていうと反抗したい年頃のガキは逆に誘導しまくったりするのかもしれんが。

863 :ゆみ:2005/09/09(金) 23:49:15
>>828 の質問、お願いします


864 :デフォルトの名無しさん:2005/09/09(金) 23:51:27
>>863
ヒント:オブジェクト

865 :デフォルトの名無しさん:2005/09/10(土) 00:35:44
>>863
Excel総合相談所 37
http://pc8.2ch.net/test/read.cgi/bsoft/1125178942/

866 :デフォルトの名無しさん:2005/09/10(土) 00:44:03
かわいい反抗だなw

867 :ゆみ:2005/09/10(土) 07:22:48
>>828 の質問、お願いします

868 :ゆみ:2005/09/10(土) 09:41:05
本当にオブジェクトでできるのでしょうか?確認したところ無理であると思いました
厳しい言い方で申し訳ありませんが、よろしくお願いします

869 :ゆみ:2005/09/10(土) 10:01:24
>>828 の質問、お願いします

870 :ゆみ:2005/09/10(土) 11:12:49
>>828 の質問、お願いします

871 :ゆみ:2005/09/10(土) 15:02:20
>>828 の質問、お願いします

872 :デフォルトの名無しさん:2005/09/10(土) 15:19:03
全くのプログラミング初心者なのですが、VBAを独学するとしたら
みなさんお勧めの入門書とかありますか?

873 :デフォルトの名無しさん:2005/09/10(土) 15:33:49
> 勧めの入門書とかありますか?
あなたが本屋に行き、読んでみてわかりやすいと思った本
どういう本が合ってるか、読みやすいか、わかりやすいかは人それぞれ

というか、VBA程度ならやる気が有ればネットだけで充分独学出来る
逆にやる気がなければどんなに書籍集めてもダメだろう

874 :デフォルトの名無しさん:2005/09/10(土) 15:34:32
ExcelVBAなのか
AccessVBAなのか
WordVBAなのか

875 :ゆみ:2005/09/10(土) 18:19:39
>>828 の質問、お願いします

876 :名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:23:55
そろそろ答え書いてもいい?

877 :名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:27:02
ダメ

878 :名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:32:36
ダメ、絶対。

879 :ゆみ:2005/09/10(土) 20:03:27
>>828 の質問、お願いします

880 :ゆみ:2005/09/10(土) 21:36:46
自己解決しました

881 :名無しさん@そうだ選挙に行こう:2005/09/10(土) 21:45:22







       ヽ(・ω・)/   ズコー
      \(.\ ノ

882 :ゆみ:2005/09/10(土) 22:01:01
うpします

http://l.pic.to/137e8

883 :名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:11:04
まんこ→×
おっぱい→○

884 :ゆみ:2005/09/11(日) 00:05:32
解決はしていません。茶々をいれるのはそろそろやめてください
本当に助けを求めて書いているのですがどうしてこんな書き込みしかないのですか?
もしご存知で親切な方がおりましたらよろしくお願いします

885 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:09:45
>>884
いい加減、ここじゃ解決しないって学習したら?

886 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:16:58
>>884
本当にどうしても正確な回答が欲しいのなら
↓ここに問い合わせるのが筋と言うもの。
ttp://support.microsoft.com/select/?target=assistance

887 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:19:04
>>884
ここまで荒らしたら、もうだれも回答してくれないよ。

888 :ゆみ:2005/09/11(日) 00:20:07
回答できない方に用はありません。ご存じの方だけレスお願いします。

889 :ゆみ:2005/09/11(日) 00:31:23
>>886
わかりました、今度MSに問い合わせてみます。
長々とスレ汚し失礼しました。

尚、以後偽者が荒らし続けるかも知れませんが
私はもう一切書き込みませんので放置していただいて結構」です。

890 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:53:37
↓偽者がトリップ付けて登場

891 :げんじろう:2005/09/11(日) 01:06:48
>>828 の質問、お願いします

892 :_:2005/09/11(日) 07:52:48
>>893 の質問、お願いします

893 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:58:27
わたしは誰?

894 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:21:23
俺俺

895 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:17:33
Excel97とExcel2002のVBAについて質問させて下さい。
Excel97で作ったVBAをExcel2002で実行させると、処理時間が大分遅くなってしまいました。
処理内容、ステップ数でも違うと思うのですが、そんなに変わるものでしょうか?

Excelの処理時間で詳しい方がいましたら、回答よろしくおねがいします。

896 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:21:09
>>895
Excel総合相談所 37
http://pc8.2ch.net/test/read.cgi/bsoft/1125178942/

897 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:31:36
おねがいします!教えて下さい!!

Access2000で、あるフォーム上にサブフォーム(帳票フォーム)があり、
そこには、バーコードをキーに商品情報を抽出した値を表示させています。
(テキストボックスを配置しています)

この時、表示させるある項目を見て、
Aならそのレコードのテキストボックスだけを赤くしたいのです。

色々探したのですが、
条件付書式でできるようなところまでは解ったのですが、

条件付書式をVBAで書く書き方はどこにも見当たりません。

おねがいします!ご存知の方、お願いします!

の、の、納期が。。。。
お助けください!


898 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:45:34
>>896
すみません。せっかく教えだていただいたのですが、
教えていただいたページを見てみたのですが、よくわかりませんでした。
もう少し、詳しく教えていただけないでしょうか?

899 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:28:01
>>896
かわいい反抗だなw

900 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:00:57
ム板の方が、Bソフ板より低レベルだなんて....._| ̄|○

901 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:04:00
レベルが低い上に性格も悪い

902 :895:2005/09/11(日) 22:46:51
>>896
すいません。早とちりしてました。
ちょっとスレが違ったみたいですね・・。
誘導ありがとうございます。

MSにも問い合わせを考えて見ます。


903 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:47:54
VBAなんざプログラム言語じゃねーYO
とか思ってる奴が多いんじゃね?

マ業界にいるとそれが普通に見えるけど、
事務系でAccessとかExcelとか日常的にバリバリに使ってる連中は
下手なVB厨じゃ太刀打ちできないレベルで使いこなしてたりするから
結構馬鹿にできなかったりする。


904 :デフォルトの名無しさん:2005/09/12(月) 01:28:41
>>903
うむ、社内SE何だが大したことしてないけど漏れは神扱いだ。

905 :デフォルトの名無しさん:2005/09/13(火) 00:25:53
Excel2003について質問です。
ブックのツールバー[書式設定]にある、[塗りつぶしの色]ボタンの状態(選択された色)を
VBAのコード上で取得することは不可能なのでしょうか?

セルをある色で塗りつぶすとき、例えば、Selection.Interior.ColorIndex = 15
みたいにしますが、色を示す常数(上記例なら15)を[塗りつぶしの色]ボタンから取得したいと思いまして。
どなたか知っている方がいらっしゃいましたら、お教えいただければと思います。

906 :デフォルトの名無しさん:2005/09/13(火) 07:05:59
>>905
Excel総合相談所 37
http://pc8.2ch.net/test/read.cgi/bsoft/1125178942/

907 :デフォルトの名無しさん:2005/09/13(火) 22:57:25
>>905
たぶん力業しかないと思われ

908 :デフォルトの名無しさん:2005/09/13(火) 23:26:12
>>907
やっぱりそうですか。。
色々調べましたが、どこにも見あたらないということはできないんでしょうね。
回答ありがとうございました。

909 :デフォルトの名無しさん:2005/09/15(木) 13:22:54
ワークシートの名前をそのシート内の某セルにするのができません。
無理なんでしょうかね?

910 :909:2005/09/15(木) 13:52:40
VBAでクリップボートにある値をシートの名前にすることができればいいのですが・・・

911 :デフォルトの名無しさん:2005/09/15(木) 14:04:29
"$D$3" 

912 :デフォルトの名無しさん:2005/09/15(木) 14:08:43
>>909
無理じゃないからがんがれ。
もちろんマルチするような奴が具体的な回答貰えないことは知ってるよな。

913 :デフォルトの名無しさん:2005/09/15(木) 14:13:53
worksheets("Sheet1").name=worksheets("Sheet3").range("d3").value

914 :909:2005/09/15(木) 14:14:27
昨日できたんですよw
なのに・・・忘れた

915 :デフォルトの名無しさん:2005/09/15(木) 14:17:50
あっ!思い出した! 事故解決の悪寒

916 :デフォルトの名無しさん:2005/09/15(木) 14:19:01
>>913の 左辺=右辺を入れ替えてもではますかね?

917 :デフォルトの名無しさん:2005/09/15(木) 14:23:49
またできなくなった(´・ω・`)ショボーン

918 :デフォルトの名無しさん:2005/09/15(木) 14:38:02
Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("a1").Value"

はできるのですが、

Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("a1:b1").Value"

はできません。

つまりa1セルに山田、b1セルに太郎と入力されている場合
Worksheets("Sheet2")の名前が「山田太郎」となればててのですが。

&を使えばうまくいくのかな?

919 :デフォルトの名無しさん:2005/09/15(木) 14:39:30
>>912
>マルチするような奴

してないってばまさか板違いでもマルチと呼ばれのか? (((( ;゚Д゚)))ガクガクブルブル

920 :デフォルトの名無しさん:2005/09/15(木) 14:43:51
> 板違いでもマルチと呼ばれのか?
当然

921 :デフォルトの名無しさん:2005/09/15(木) 14:50:29
>>920
いちいちチェックするなよw
向こうに書いて後でこっちに気づいたからココに書いたんだよ!

(ry

それはいいとしてセルA1とセルA2を別セル例えばA3に=A1&A2で合体させて

Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("A3").Value
とすればいいのかな?

もう昨日の昼からいろいろやってとてつもない時間使ってるよ・・・

922 :デフォルトの名無しさん:2005/09/15(木) 14:53:45

> 向こうに書いて後でこっちに気づいたからココに書いたんだよ!

そう言う場合は、最初に書いたスレで質問を取り下げるのが礼儀という物

923 :デフォルトの名無しさん:2005/09/15(木) 14:57:46
>>922
工エエェェ(´д`)ェェエエ工

最初に書いたスレで質問を取り下げるの???

誰が決めたの?
暇人じゃないんだから

924 :デフォルトの名無しさん:2005/09/15(木) 14:59:32
> 誰が決めたの?
2chのみんな

> 暇人じゃないんだから
そう、皆暇人じゃないんだから、あちこちに無駄な質問ばらまいて
回答者に無駄な時間費やさせるような真似はしないように。

925 :デフォルトの名無しさん:2005/09/15(木) 15:01:06
>>905
EXCEL 2000だけど、マウス合わせたときの文字がこうやって取得できるから
一つ一つ変換。 こんなんでOKかな?

Dim cbp As CommandBarPopup
Dim ci As Long
Set cbp = CommandBars.FindControl(ID:=1691)
If cbp Is Nothing Then
MsgBox "見つかりませんでした。"
Else
Select Case cbp.TooltipText
Case "塗りつぶしの色 (自動)": ci = -4142
Case "塗りつぶしの色 (黒)": ci = 1
Case "塗りつぶしの色 (茶)": ci = 53
Case "塗りつぶしの色 (オリーブ)": ci = 52
Case "塗りつぶしの色 (濃い緑)": ci = 51
Case "塗りつぶしの色 (濃い青緑)": ci = 49
Case "塗りつぶしの色 (濃い青)": ci = 11
Case "塗りつぶしの色 (インディゴ)": ci = 55
Case "塗りつぶしの色 (80% 灰色)": ci = 56
Case "塗りつぶしの色 (濃い赤)": ci = 9
Case "塗りつぶしの色 (オレンジ)": ci = 46
Case "塗りつぶしの色 (濃い黄)": ci = 12
Case "塗りつぶしの色 (緑)": ci = 10
Case "塗りつぶしの色 (青緑)": ci = 14
Case "塗りつぶしの色 (青)": ci = 5
Case "塗りつぶしの色 (ブルーグレー)": ci = 47
Case "塗りつぶしの色 (50% 灰色)": ci = 16
Case "塗りつぶしの色 (赤)": ci = 3
Case "塗りつぶしの色 (薄いオレンジ)": ci = 45
Case "塗りつぶしの色 (ライム)": ci = 43


926 :デフォルトの名無しさん:2005/09/15(木) 15:01:38
質問者と回答者だけなら>>922も分かるが、見ているその他多数の人の為なら
質問取り下げるのはどうかね?
ほとんどの人が両方のスレなんて見てないしましてや板違いでっせ?
ダメだな〜

927 :925:2005/09/15(木) 15:02:27
Case "塗りつぶしの色 (シーグリーン)": ci = 50
Case "塗りつぶしの色 (アクア)": ci = 42
Case "塗りつぶしの色 (薄い青)": ci = 41
Case "塗りつぶしの色 (紫)": ci = 13
Case "塗りつぶしの色 (40% 灰色)": ci = 48
Case "塗りつぶしの色 (ピンク)": ci = 7
Case "塗りつぶしの色 (ゴールド)": ci = 44
Case "塗りつぶしの色 (黄)": ci = 6
Case "塗りつぶしの色 (明るい緑)": ci = 4
Case "塗りつぶしの色 (水色)": ci = 8
Case "塗りつぶしの色 (スカイブルー)": ci = 33
Case "塗りつぶしの色 (プラム)": ci = 54
Case "塗りつぶしの色 (25% 灰色)": ci = 15
Case "塗りつぶしの色 (ローズ)": ci = 38
Case "塗りつぶしの色 (ベージュ)": ci = 40
Case "塗りつぶしの色 (薄い黄)": ci = 36
Case "塗りつぶしの色 (薄い緑)": ci = 35
Case "塗りつぶしの色 (薄い水色)": ci = 34
Case "塗りつぶしの色 (ペールブルー)": ci = 37
Case "塗りつぶしの色 (ラベンダー)": ci = 39
Case "塗りつぶしの色 (白)": ci = 2
End Select
MsgBox ci
End If

928 :デフォルトの名無しさん:2005/09/15(木) 15:04:31
よくガイシュツの質問やスレ違いの質問にムキになる香具師がおるが
第三者の為に書いてやってるんだからな

929 :デフォルトの名無しさん:2005/09/15(木) 15:05:51
ガイシュツの質問に文句を言えるのはFAQをまとめている人間だけ

930 :デフォルトの名無しさん:2005/09/15(木) 15:06:36































 

931 :デフォルトの名無しさん:2005/09/15(木) 15:06:47































 

932 :デフォルトの名無しさん:2005/09/15(木) 15:07:14































なんかごちゃごちゃしてきたので、ここから心機一転

933 :デフォルトの名無しさん:2005/09/15(木) 15:09:41
とりあえず漏れの質問を整理しよう。

シート名にA1+B1の名前を付けたい 例) A1=山田  B=太郎 の場合「山田太郎」

C1=A1&B1にしておけば、

Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("c3").Value

の記述でできた。

でも別の方法もあると思うのでそれを知りたい

934 :デフォルトの名無しさん:2005/09/15(木) 15:10:54
論破する奴は嫌い

935 :デフォルトの名無しさん:2005/09/15(木) 15:11:59
>>933
...で?

936 :デフォルトの名無しさん:2005/09/15(木) 15:14:07
>>934
ウケ狙ったの?
かなり面白いんだがw

937 :デフォルトの名無しさん:2005/09/15(木) 15:21:44
学年の1組と3組と4組(これは毎回変わる)の番号n〜m(これも毎回変わる)
を抽出させるVBA作るのは相当な知識が必要だろな・・・

これが全クラスの成績トップ10とかだったら簡単だけけうけど
はぁ・・・

938 :デフォルトの名無しさん:2005/09/15(木) 15:31:27
まだ初心者だけど、多分想像するにボタンとか作って
●年○組の成績が上位◎人分を抽出して印刷するとかいうのができるんだよね?
さっさと覚えたいが脳が働かるねぇー

939 :デフォルトの名無しさん:2005/09/15(木) 15:34:24
組が列方向に、番号が行方向に展開されていて、
指定組の指定番号範囲の値を抽出するとかなら
VBAなら簡単だし、VBA使わなくても出せるレベルだけど
もっと難しい事を想定してるの?

940 :デフォルトの名無しさん:2005/09/15(木) 16:53:22
 






























 

941 :デフォルトの名無しさん:2005/09/15(木) 20:45:10
>>925
おお、これは。。
目から鱗のテクニックです!
これで望んでいる機能を作ることができます。
ありがとうございました。

942 :デフォルトの名無しさん:2005/09/15(木) 21:23:40
>>939
もちろんそれは分かってる。
わかりやすく例えを学生の成績にしてるが
「全クラスのテストの点数が80点以上の人を抽出」だと簡単だが

「任意のクラスの任意の点数」の場合「任意」が多ければVBAで自動化するのも
あんま意味ないなと思って

943 :デフォルトの名無しさん:2005/09/15(木) 21:26:12
とりあえず、VBAはまだ始めたばかりです。
やりたいことを日本語で書いて、それをどうPCへ命令すればいいのか考えがおもしろみ
でもあり難しさでもあるよな。

とりうえず「この条件まで」「この場合」をマスターしないとな

944 :デフォルトの名無しさん:2005/09/15(木) 22:28:21
>>943
ExcelのVBAの場合はWorkbooks,Worksheets,Range,Cellsの基本をマスターすれば
かなり色々なことが出来ると思われ。
テクニックに走らず、基本から少しづつやれば上達は早いと思う。

945 :デフォルトの名無しさん:2005/09/15(木) 22:43:34
EXCELでコピーしたエリアを取得する方法ってありますか?

946 :デフォルトの名無しさん:2005/09/15(木) 22:48:13
具体的に

947 :デフォルトの名無しさん:2005/09/15(木) 23:17:55
>>946
すみませんレスありがとうございます。
VBA初心者です。

簡単なものをサンプル見たりして作っていますが今回書きましたのは
VBAを実行する前に、先に範囲を選択コピーしていた後を想定しています。
クリップボードにあるものを貼り付ける前にどのセル範囲がコピーされていたのか
を確認出来ればと思い投稿しました。
もう少し細かく書くとコピーされていた対象がセル単体なのか・複数セルの範囲なのか
行または列のみなのか等です。

948 :デフォルトの名無しさん:2005/09/15(木) 23:59:21
>>947
だから具体的に何を知りたいの?

シート上でコピー時に表示される破線枠の範囲を知りたいのか、
クリップボードのデータが単一セルの物か複数セルのものかを知りたいのか。

君の書き込みは結果ばかり先走っていて状況説明が不十分。
そもそも、範囲選択のみ手動で行い、コピー以降をVBAで行った方が効率良くないか?
範囲選択した状態ならSelection.Addressで選択範囲取れるし。

949 :デフォルトの名無しさん:2005/09/16(金) 00:39:47
>>948
すみません、説明が下手糞で・・
>そもそも、範囲選択のみ手動で行い、コピー以降をVBAで行った方が効率良くないか?
まさにそれをしようとしています。
何故コピーの範囲を確認したかったのかというと、貼り付ける場所はSelection.Addressを
使うつもりでした。
たとえば初めにコピーしていた範囲が行で貼り付けようとした場所が列だった場合など
エラーである理由をmsgboxで明確に表示させようと思ったからです。
単にエラーであるのを分岐させるならOn Error Goto・・で出来るのですが、、初めにコピー
をした範囲が明確であればこれを判断させるのも楽だと思いました。

950 :デフォルトの名無しさん:2005/09/16(金) 01:58:24
すみません・・補足になります。

>シート上でコピー時に表示される破線枠の範囲を知りたいのか
そうです!これです。
もし宜しければご指導お願いします。m(__)m

951 :ゆみ:2005/09/16(金) 02:40:31
>>828 の質問、お願いします

952 :デフォルトの名無しさん:2005/09/16(金) 02:41:14
また荒らしが、、、

953 :デフォルトの名無しさん:2005/09/16(金) 02:48:57
> 何故コピーの範囲を確認したかったのかというと、貼り付ける場所はSelection.Addressを
> 使うつもりでした。
別に貼り付ける場所にSelection使うのはいいけど、コピー範囲でもSelection使えばいいじゃん
例えばこんな感じとか

Private Sub CommandButton1_Click()
  Static hoge As Range
  If Application.CutCopyMode = xlCopy Then
    MsgBox "コピー範囲 :" & hoge.Address & vbCrLf & _
        "現在の選択範囲 :" & Selection.Address
    '張り付け処理
    Application.CutCopyMode = False
    Set hoge = Nothing
    CommandButton1.Caption = "Copy"
  Else
    Set hoge = Selection
    hoge.Copy
    CommandButton1.Caption = "Paste"
  End If
End Sub

954 :デフォルトの名無しさん:2005/09/16(金) 12:52:24
VBAで「今コピーしているもの」を貼り付けるには?

マクロの場合、上でやってみるとVBAでの記述は「今コピーしているもの」になりますよね?

そうではなく、例えばA1セルの値を貼りたいんです。

Name="A1"じゃ「A1」と貼られるしw

955 :デフォルトの名無しさん:2005/09/16(金) 13:41:46
>>954は釣りだな。間違いない。

956 :デフォルトの名無しさん:2005/09/16(金) 21:43:33
>>953
レスありがとうございます。
コピーは主にショートカット(Ctrl+C)を使うので、マクロのコピーにこれを
割り当ててコピーと一緒に選択範囲をPublic変数で持ち越して他のVBAで試す
ところまでは出来ていました。

ただそれをせずに、他にコピーの範囲がわかる方法があるのではと思い投稿
しました。
ヘルプをみたりしてみましたが、現状の自分のスキルではそこが限界みたいです。
どうもありがとうございました。

957 :デフォルトの名無しさん:2005/09/16(金) 22:31:47
>>955
釣りじゃないってw
ちょっと勉強不足

958 :デフォルトの名無しさん:2005/09/16(金) 22:32:49
Name="A1.value"でもダメなんだよな

959 :デフォルトの名無しさん:2005/09/16(金) 22:34:22
> Name="A1"じゃ「A1」と貼られるしw
当然

> Name="A1.value"でもダメなんだよな
当然

960 :デフォルトの名無しさん:2005/09/17(土) 01:07:39
質問です。
エクセルなんですが

0000        0000
0000        0000
0400        3456
0450  これを  3456
3456        3456
3456        3456
3456

のように4を基準として上方向にそろえるようなプログラム
を作りたいのですが、どのようにすればよいのでしょうか?
教えてください。お願いします。

961 :デフォルトの名無しさん:2005/09/17(土) 01:20:10
>>960
数値ではなく文字列として扱って
あとはループと条件分岐と文字列操作
VBAのテク的には超初歩的な機能だけでいける
あとのアルゴリズム的な部分はVBA関係なくお前の知能次第

962 :デフォルトの名無しさん:2005/09/17(土) 02:00:56
>>961
返答ありがとうございます。
しかしながら初心者で低能なため
それらをどう組み合わせていいものかよく分かりません…。
具体的に教えていただけると有難いです

963 :デフォルトの名無しさん:2005/09/17(土) 02:19:42
>>962
ここは「コード書いてください」スレじゃないので
「説明聞いて出来ない奴はVBAなんか使うな」で終わりですよ。
VBAについて知りたいのではなく、単に具体的なコードが欲しいだけなら
そういうのを請け負ってるところもあるから、そういうところで依頼しなさい。

参考までにひとつ有名所を
ttp://www.officetanaka.net/order/index.htm

964 :デフォルトの名無しさん:2005/09/17(土) 02:29:56
>>963
すいません。ありがとうございました

965 :デフォルトの名無しさん:2005/09/17(土) 07:12:41
>>964
ここならコードも書いてくれるぞ

Excel総合相談所 37
http://pc8.2ch.net/test/read.cgi/bsoft/1125178942/

966 :デフォルトの名無しさん:2005/09/17(土) 10:36:25
919 名前:デフォルトの名無しさん 投稿日:2005/09/15(木) 14:39:30
>>912
>マルチするような奴

してないってばまさか板違いでもマルチと呼ばれのか? (((( ;゚Д゚)))ガクガクブルブル

967 :デフォルトの名無しさん:2005/09/17(土) 10:43:58
>>966
間違った時点で質問権失ってますからその通りです。

968 :デフォルトの名無しさん:2005/09/17(土) 10:59:36
そもそも板違いじゃないしな

969 :デフォルトの名無しさん:2005/09/17(土) 13:43:54
shape.nodes は4個単位で座標が帰ってくるのですが、
両端ではない真ん中の2点って、何の座標でしょうか?

970 :964:2005/09/17(土) 22:36:47
>>965
ありがとうございます。
そろえるつもりが全て一番上に行ったり一つだけそろったり
と苦戦してるので行ってきます。

971 :デフォルトの名無しさん:2005/09/18(日) 23:20:37
質問です。AccessXPからVBAでExcelテンプレートを開いて、xlsファイルを
出力しようと思っています。
xlsテンプレートには、Excelブックをオブジェクトとして挿入してます。
以下のような感じで記述しました。

Dim objExcel As New Excel.Application
Dim objBook As Excel.Workbook
Dim objSheet As Excel.Worksheet
Dim objSubBook As Excel.Workbook
Dim objSubSheet As Excel.Worksheet

objExcel.Workbooks.Open "テンプレートファイル"
Set objBook = objExcel.Workbooks(1)
Set objSheet = objBook.Worksheets("シート 1")
'挿入しているブック(名称:サブブック)を取得
Set objSubBook = objSheet.OLEObjects("サブブック").Object
Set objSubSheet = objSubBook.Worksheets("サブシート")

objSubSheet.Range("B2") = "TEST" '挿入しているブックを編集
objSheet.OLEObjects("サブブック").Activate

objSubBook.Close True
objBook.Close True, "出力ファイル"
objExcel.Quit

しかし、Activate でExcelが一瞬立ち上がってしまいます。
Activate を省略すると出力したxlsファイルの挿入オブジェクトの内容が
一度編集状態にしないと見た目が反映されません。
Excelを立ち上がらせずに裏で行ういい方法はありますでしょうか。

972 :デフォルトの名無しさん:2005/09/18(日) 23:33:27
>>971
ACCESS総合相談所 その13 【桐にしとけ】
http://pc8.2ch.net/test/read.cgi/bsoft/1121055646/

973 :デフォルトの名無しさん:2005/09/19(月) 01:02:48
>>972
そこはExcelスレと違って誘導する価値すらない糞スレだよなぁ……

>>971
良く分からないんで適当に答えるけどApplication.Visibleでなんとかできない?

974 :デフォルトの名無しさん:2005/09/19(月) 02:02:55
>>972
今Wordで実験してみまして、Word上のVBAで同じようにExcelテンプレートを使って
xlsファイル出力しようとしても同じようでしたので、Accessスレは微妙みたいです。

>>973
レス感謝です。objExcel.Visible = False を試してみましたが駄目でした。。。
972でも誘導されましたが、スレ違いだったでしょうか。
どうも実験内容からするとExcelスレ向きのような気がしてきました。。。

975 :デフォルトの名無しさん:2005/09/19(月) 02:24:08
Excelスレは間違いなくスレ違い。

976 :デフォルトの名無しさん:2005/09/19(月) 14:35:16
>>975
通常のExcel操作で埋め込みオブジェクトを編集状態にせず最新状態に反映する
方法があれば、その操作をマクロで記録してVBA化すればどうかな、と思ったもので。

977 :デフォルトの名無しさん:2005/09/19(月) 14:49:58
すみません、質問させてください

Excelでコマンドボタンをクリックするとチェックボックスのチェックが外れる、という仕組みを作りたいのですが
どうも上手くいきません。
コマンドボタンを押した際に

Sub ボタン1_Click()

    ActiveSheet.Checkbox1.Value = 0

End Sub

このような動きをするよう記述をしたのですが
「オブジェクトはこのプロパティ、またはメソッドをサポートしていません」と表示され
思い通りの結果が得られません。

すみませんがどなかたご教授いただけますでしょうか。
よろしくお願いします。


978 :デフォルトの名無しさん:2005/09/19(月) 14:57:02
>>977
うちではその方法でうまくいくよ

979 :デフォルトの名無しさん:2005/09/19(月) 15:30:10
>>977
散々既出。ここ見ろ。
ttp://www.tt.rim.or.jp/~rudyard/torii009.html

980 :デフォルトの名無しさん:2005/09/19(月) 15:34:23
>>979
恥ずかしい奴だな( ̄ー ̄)ニヤリッ

981 :977:2005/09/19(月) 16:31:05
>>978
ご回答ありがとうございました。
うちの環境ではどうもうまくいきません。

先ほどからについて調べているのですが、参考になるものが見当たらず相当参っています。
他に何か方法は無いでしょうか?

すみませんがよろしくお願いします。


982 :デフォルトの名無しさん:2005/09/19(月) 16:47:54
こういう場合、原因は大抵単純な凡ミスだ。
もう一度といわずもう十度くらいよく見直してみな。

と、その前に新規ブック作って>>977の部分だけ1からやってみろ。
これでダメならExcelかシステムがバグってるんだから、
ExcelやOSの再インストールしてみな。

983 :デフォルトの名無しさん:2005/09/19(月) 17:27:05
value=false・・・・・ジャマイカ?

984 :デフォルトの名無しさん:2005/09/19(月) 17:46:45
>>983


985 :デフォルトの名無しさん:2005/09/19(月) 17:49:04
Falseは0だよ。
0で問題出るなら、Falseにしたって同じでしょ。

986 :デフォルトの名無しさん:2005/09/19(月) 17:49:12
>>983


987 :デフォルトの名無しさん:2005/09/19(月) 19:31:05
このスレのレベルを把握した

988 :デフォルトの名無しさん:2005/09/19(月) 19:32:36
だからExcelスレの方が良いのに

989 :デフォルトの名無しさん:2005/09/20(火) 00:09:58
突然で申し訳ありませんが質問があります。
住所録などを作成したいのですが、いくつかのTextボックスに
住所や郵便番号を入力し、「登録」ボタンを押したら「FlexGrid」に
登録内容を表示するようにするにはどうしたらよいのでしょうか?
すみませんがどなたか教えてもらえないでしょうか?

990 :デフォルトの名無しさん:2005/09/20(火) 00:22:43
>>989
標準コントロール以外を使いたいならVBAではなくVBの勉強しろ。
まあ、答えというとtextmatrix() = テキストボックス.textかな。
あとは自分で調べようね。

272 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)