VBAについて Ver.3.0

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2鳥取砂丘 ◆Dream/3P/. :04/03/02 09:49
  よゆうで2げっと
 ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄
             。 。
             || ||  /⌒ ヽ.
             / ⌒ヽ( /⌒ヾ )
            ((゚Д゚,,))ゝヽのノノ
           ⊂⊂ _____つ   ))    ))
4

>>3
さっきゅんって神出鬼没なんだね。
通学時間をA2から読み取り
30未満「近い」 30以上60未満なら「普通」
60以上90未満なら「遠い」 90以上なら「超遠い」 と B2に表示
A1に通学時間 B1に判定 を表示 IF文を用いる
と、いう問題を学校で出され、模範解答ももらったのですが

Sub 通学時間()
jikan = Cells(1, 2)
If jikan < 30 Then
hantei = "近い"
Else
If jikan < 60 Then
hantei = "普通"
Eles
If jikan < 90 Then
hantei = "遠い"
Eles
hantei = "超遠い"
End If
End If
End If
Cells(2, 2) = hantei
End Sub

で作るとどんな数値を入れても判定が「近い」しかでないのです…
どなたか、きちんと動くようにアドバイスいただけませんか?
お願いしますっ
6デフォルトの名無しさん:04/03/02 12:04
>>5
×:jikan = Cells(1, 2)
○:jikan = Cells(2, 1)
×:Eles(2か所)
○:Else
7デフォルトの名無しさん:04/03/02 15:52
>>5
最近では、学校でVBAするの?
学校って、どんな学校?
単位もらえるの?
>>6
ありがとうございます。
おかげで動くようになりました。

>>7
はい、学校でやります。普通の学校で、単位ももらえます。

迷惑ついでにもう1つ詰まった問題をアドバイスいただけないでしょうか…?

10個の整数をA1〜A10から読み取り、それらのうちの任意の
i番目とj番目(iはA12、jはA13から読み取る)の値を交換し、変更後の10個の整数をB1〜B10
に表示する。ただし、配列を使うこと。

Sub 交換()
Dim a(10)
For k = 1 To 10
a(k) = Cells(k, 1)
Next k
i = Cells(12, 1)
j = Cells(13, 1)
x = a(i)
a(i) = a(j)
a(j) = x
For k = 1 To 10
Cells(k, 2) = a(k)
Next k
End Sub
9デフォルトの名無しさん:04/03/02 19:42
>>8
ちゃんと動いたよ。
Rangeプロパティは知らない?
i = Cells(12, 1)
より
i =range("A12")
の方が問題文に近くてわかりやすいと思う。
10やん:04/03/02 20:03
A12とA13を入れ替えてどうするんだよ!

Sub 交換()
Dim a(10)
For k = 1 To 10
a(k) = Cells(k, 1)
Next k
i = Cells(12, 1)
j = Cells(13, 1)

x = a(i)
a(i) = a(j)
a(j) = x

For k = 1 To 10
Cells(k, 2) = a(k)
Next k

End Sub

これでいかがですか?

つーか通学時間のやつ、無駄にIfネストで使わずにElse If使ったほうがいいよ。

End If
End If
End If
なんてやめれ。
11やん:04/03/02 20:06
あ、すいません。よく見たら同じ文になってた。
失敬。
12デフォルトの名無しさん:04/03/02 21:08
>>10
>A12とA13を入れ替えてどうするんだよ!

(´д)ヒソ(´д`)ヒソ(д`)
13デフォルトの名無しさん:04/03/02 21:24
>>8
普通の学校って、大学?専門学校?高校?
14デフォルトの名無しさん:04/03/03 10:14
セルの設定
A1:"=A2+A3"
A2:"3"
A3:"2"

とします。
「up」と「down」のボタンを作り、

「up」ボタンを押すとA1の値を10倍
「down」ボタンを押すとA1の値を1/10

となるようなマクロを教えていただけないでしょうか?
>>14
収束条件が不足しているためマクロとするのは不可能です。
条件をはっきりさせてゴールシークを利用しましょう。
>>14
何がしたいのか分からんが、
CommandButton1が up
CommandButton2が down とする。

Private Sub CommandButton1_Click()
Range("A1") = Range("A1") * 10
End Sub
Private Sub CommandButton2_Click()
Range("A1") = Range("A1") / 10
End Sub
>>16
こんなときのSpinButtonやろ。
CommandButton使うより。

それだと、A2、A3を変えても、反映しませんね。
>>14が何をしたいのかわからないけど、設計自体変えたほうが良さげ。
1816:04/03/03 22:41
これでは?

Public Val As Double
Private Sub SpinButton1_SpinUp()
Val = Val * 10
Range("A1") = Val
End Sub
Private Sub SpinButton1_SpinDown()
Val = Val / 10
Range("A1") = Val
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$2" Or Target.Address = "$A$3" Then
Val = Range("A2") + Range("A3")
Range("A1") = Val
End If
End Sub
1917:04/03/03 23:02
良さげですね。
ただ、Val←関数名と同じ変数名は避けたほうがいいかもね。
2018:04/03/04 23:56
>>19
そうですね。
age
EXCEL でフォームやVBAを使用し4MBにものぼるプログラムを作成しています。
あまりに大きくなりすぎたので、EXCELブックを最適化したいと思っています。
フォームやモジュールを全てエクスポートし、
解放したあとインポートし直す事によって
ある程度サイズ縮小が出来るというところまで分かったのですが、
毎回するのは大変なので、
それを自動で行ってくれるマクロとかプログラムを探しています。

誰か作った方はいませんか?
もしいましたら、そのPGを分けていただけませんか?

もし他にも最適化する方法をご存じの方はご教授ください。
VBEのVBComponentsをまわしてInport/Export
24uya:04/03/09 00:13
表を読み取っていろんな関数で内挿までできるマクロって誰か教えてくださいませんか?
25デフォルトの名無しさん:04/03/09 10:24
初歩的質問ですいませんVBAのマクロで
強制的にあるセルにフォーカスをセットさせたいのですが
どうすればよいでしょう?
26やん:04/03/09 17:45
>>24
それだけじゃわからん。

>>25
自動記録すれば?
27デフォルトの名無しさん:04/03/09 22:27
質問です。
特定のセルの内容が、数式なのか、それとも直接値なのか、
見分ける方法はないでしょうか?

たくさんのシートを持つブックの中に、所々に合計シートが入っていて、
他の複数のシートの合計値を保持しています。
その合計シートを見分けたいのです。

合計シートと単体のシートのレイアウトは全く同じですが、
特定のセルのデータが、合計シートは数式、単体のシートは直接値なのです。

どうかよろしくお願いいたします。
28デフォルトの名無しさん:04/03/09 22:41
>>27
Left(Range("A1").Formula, 1) = "="
29デフォルトの名無しさん:04/03/09 22:42
VBAでコントロールコードを表示(?)させるには?

debug.print でイミディエイトウインドウ内で上下左右にカーソルを移動させたい。
3027:04/03/09 23:17
>>28
うまくいきました!大変ありがとうございます!
Excelのマクロの記録でコンボボックス貼り付ける処理を記録すると下のようなコードができるんですけど、この処理以降でステップ実行が利かなくなります。

ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=255, Top:=57, Width:=161.25, Height:= _
44.25).Select

ステップ実行していくと↑の処理以降で「中断モードでは入力できません。」ってメッセージがでてデバックも何もできない;;
だれか解決方法知ってませんか?
32デフォルトの名無しさん:04/03/10 20:43
ExcelのVBAなんですけど、セルをアクティブにするとき
activateとselectとの使い分けってみなさんどうしてますか?
33デフォルトの名無しさん:04/03/11 04:36
すいません。うpしておきました。
セルD4に「不明」という文字が挿入された場合の処理が解らないんですが・・
 ↓これをどこに入れればいいの?
If IsDate(Range("D3").Value) Then
If IsDate(Range("D4").Value) Then
If IsDate("不明") Then
If IsDate("不明") = False Then
MsgBox "日付データではありません"


ttp://ptba2.hp.infoseek.co.jp/cgi-bin/up/bbs.cgi
[No,2395] だめぽ
教えて君 [2004/3/11(木) 午前4:31:37]
どうやったらいいの?
>>33
(1) [ALT] + +[F11] で VBエディタを起動。
(2) プロジェクトの Sheet1 をダブルクリック
(3) 下記コードをコピペ。
(4) D列の値を変更すると、日付かどうかチェック。
  日付値と"不明" と "" 以外は警告して入力値を消去する。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 4 Then
Exit Sub
End If
If IsDate(Target.Value) = False Then
If Target.Value <> "不明" And Target.Value <> "" Then
MsgBox ("日付データではありません")
Target.Value = ""
End If
End If
End Sub
3533:04/03/11 12:10
>>34
出来ました。ありがとう御座います
>>31
前スレ914-
37デフォルトの名無しさん:04/03/11 20:23
VBAでPerlのsort関数のように
配列の中身でソートする関数はありませんか?
38デフォルトの名無しさん:04/03/11 22:01
Accessでオートナンバー型をやめて
Dmaxを使った自動採番にしようと思っているのですが、
分からないので質問させてもらいました。

挿入前処理で
H16-0001といった風に番号をつけたいのですが、
ハイフンを入れることもできるのでしょうか?
できるとするなら、コードを教えてください。



それと以前、自動採番に挑戦したとき、
テーブルのデータが何もなしの状態で
Dmax+1を使用したら、番号がつきませんでした。

テーブルデータがない場合の対策も教えて頂きたいです。
よろしくお願いします。
マルチ、ウザッ
40デフォルトの名無しさん:04/03/12 15:26
Excel2002にてコマンドボタンのVBAを記述しました。

----
Private Sub DBTrigger_236_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ActiveSheet.Cells(4, 54).Value = "1"
'
End Sub
Private Sub DBTrigger_236_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ActiveSheet.Cells(4, 54).Value = "0"
End Sub
----

このような記述をボタンの分だけ作成しました。
ボタンは1シートに10個ほど作成してあります。

このとき、いづれかのボタンを押す度に全てのコマンドボタンの表示がちらつく
のですが、何か対策はありますか?
Perlのスレで質問したのですが、VBAに詳しい人に聞いたほうが良いと言われたので
同じ質問で申し訳ないのですが、よろしくお願いします。

perlで使用するWIN32::OLEについて教えて下さい。
PowerPointでグラフを作っているのですが、
グラフの軸の部分の目盛間隔の設定がうまくいきません。

$Chart->Axes(xlValue->{MajorUnitIsAuto} = FALSE;
$Chart->Axes(xlValue->{MajorUnitScale} = 0;
$Chart->Axes(xlValue->{MajorUnit} = 10;

と指定すると、
目盛間隔の自動は外れ、単位は「日」になるのですが、
肝心の数値部分が10になりません。
10日単位の目盛にするにはどうすればいいのでしょうか?
宜しくお願いします。
>>41
Perl経由じゃなく、VBAだけで試してみてもダメ?
>40
マクロ処理中は画面の更新停止するようにしてみたら?
4441:04/03/12 21:43
>>42
すみません、VBA自体使うのが初めてで、VBとかもほとんどやった事がなくて
ソフトも入っていないんですが、
VBがインストールされていなくてもVBAだけっていうのは出来るんですか?
PowerPointがインストールされているならVBAもはいってる
4633:04/03/13 01:59
>>34
そっちの域には達してないようです。
これで解決できました。
ごめんなさい。
Sub s_1()
If IsDate(Range("D4").Value) Then
End If
If IsDate(Range("D4").Value) Then
End If
If IsDate("不明") Then
End If
If IsDate("不明") = False Then
MsgBox "日付データではありません"

End If
End Sub

VBAのマクロのパスワードを解除するマクロカッターなるものが
あるそうですが、どういう風にしてパスワードを解除してるのか
知ってる人がいたら教えて。

また、本当に解除できるのかも教えて。
48デフォルトの名無しさん:04/03/14 13:09
範囲選択の方法で
Range("A1,B2,C3").Select
とすると3つのセルが選択できますけど
これをR1C1方式で記述するにはどうすればよろしいでしょうか?
49デフォルトの名無しさん:04/03/15 14:39
Excel2000を使用して、以下の事を実現しようとしているのですが、
教えてください。

・セルの移動を行う
・セル移動のイベントを拾う
・移動前のセルのアドレス(A1とか)を拾う
・移動前のセルの情報を取得して、該当セルであれば、操作を行う。
です。

セルが移動したときのイベントの拾い方が分からないのです。
知っている方いらっしゃいましたら、ご教授お願い致します。
50デフォルトの名無しさん:04/03/15 14:50
UNIXのコマンド郡をVBScriptでリプレースするプロジェクトとかどっかにないのかね。
>>49
Worksheet_SelectionChange(ByVal Target As Excel.Range)
>>48
こういうこと?
Application.Union(Cells(1, 1), Cells(2, 2), Cells(3, 3)).Select
Rangeの引数はA1形式限定なので、Cells(行,列)をUnionでくっつけてます。
5349:04/03/16 19:17
自己解決しました
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
で、セルが修正されたイベントを拾うことが出来ました。
54デフォルトの名無しさん :04/03/16 21:48
シートにコンボボックスのあるブックを開いて閉じる時に
ページ違反で強制終了されます。
解決法はないでしょうか?
55デフォルトの名無しさん:04/03/17 15:21
今、友人が作ったVBA(EXCEL)をもらって勉強をしています。
早速実行して、実感してみようと思ったんですが
Dim aaa As OraSession ← の所で止まって
コンパイルエラーと出て内容が
プロジェクトまたはライブラリが見つかりません
と表示されました。
これは参照設定が足りないんでしょうか?
もし追加をするとしたら何を追加したらいいんでしょうか?
宜しくお願いします。


56デフォルトの名無しさん:04/03/17 20:41
ある列の値が入力されている最後の行まで一つずつセルを進めながら
処理をするというループを考えているのですが、分からないので
力を貸してください。
その列の中には空白のセルもいくつかあるので
Do While Activecell.Value <> "" 〜 Loop
というのはできません。よろしくお願いします。

Range("A1").Select

Do While ???
'ここに何らかの処理
Activecell.Offset(1,0).Select
Loop
>>55
参照設定で参照不可になってるヤツがないですか?

>>56
Range("A65536").End(xlUp)でとれるRangeオブジェクトがA列の一番下のセル
>>55
Oracleのクライアント入ってなきゃ動くわけねえべ。
その友人はどういうつもりでそのファイルを渡したのか。
>>57
ありがとうございます。
助かりました。
60デフォルトの名無しさん:04/03/18 22:29
shellで起動をかけたアプリケーションの終了を待って
続きを実行する方法を教えてください。
>>60
改行が多いというメッセージが出たんで下の所にうpした。
参考になるかどうかはしらんけど。

http://www.42ch.net/
1079617015.lzh
6260:04/03/18 23:17
>>61
問題解決できました。
とても参考になりました、ありがとうございます。

6361:04/03/18 23:27
追加

※参考 Test.batを実行後DOS窓を閉じる
  dim tmp
  tmp=Shell("Command.Com /C C:\test.bat",6)
64会社員:04/03/19 01:39
仕事で、申込書(excel)に基づいて契約書(word、約15ページ)を作っています。
申込書から転記するだけの項目が17箇所もあり、いずれの項目も長文の英文なので、
できれば申込書にマクロを組みこんで、契約書を自動作成したいと思っています。
が、
@エクセルのマクロからワードを立ち上げられない
Aコピペ先(=契約書の該当部分)がうまく指定できない
という問題にブチあたっています。

申込書はwordファイルに変えてもいいのですが、
そうすると、申込書のコピペ元もうまく指定できないような気がします。

また、場所をうまく指定するにはフォームを使えばいいような気がするのですが、
フォームの入っている文書はうまくマクロが機能してくれません。

いかにも素人の質問で恐縮ですが、いい解決策はあるでしょうか?
よろしくご教示ください。
65デフォルトの名無しさん:04/03/19 05:58
>64
ExcelからWordへ転記する箇所は、1対1でしょうか?
そうであれば、ワードの「差し込み印刷」を使えば良いでしょう。

>また、場所をうまく指定するにはフォームを使えばいいような気がするのですが、
>フォームの入っている文書はうまくマクロが機能してくれません。
↑この部分だけ、意味がまったくわかりませんでした。
主に”フォーム”が何を指しているのかわかりません。
(実際に)何をどうしたら、どのようなマクロがどう動かないのでしょう?
66会社員:04/03/19 06:17
ありがとうございます。というか不明瞭ですみません。

>ExcelからWordへ転記する箇所は、1対1でしょうか?
>そうであれば、ワードの「差し込み印刷」を使えば良いでしょう。
同じ内容を2度繰り返す項目、3度繰り返す項目があります。
また、できた契約書はwordファイルで海外に送付し、
内容について顧客と交渉を行うため、
契約書が1つずつファイルで作成される必要があります。

>↑この部分だけ、意味がまったくわかりませんでした。
>主に”フォーム”が何を指しているのかわかりません。
>(実際に)何をどうしたら、どのようなマクロがどう動かないのでしょう?
すみません。×フォーム ○フィールド です。
私が試したのは、申込書をwordファイルで作り、
契約書、申込書それぞれのコピペする部分にだけ入力可能なように
フィールドを作り、保護をかけた上でマクロを記録しました。
全然動きませんでした。

難しいことをやろうとしているのでしょうか?
67デフォルトの名無しさん:04/03/19 23:41
変数の代入がうまく出来ません。

D3:test.bat など

D3はコンボボックスになっていて
いろいろ選択出来るように指定してあります。

以下のような感じで出来そうだと思っていますが
変数がうまく代入できません。

Set apr = Range("D3")  
Shell("c:\tools\bat\"ここからtest.batを動かしたいのでaprを代入したい)

どうやったらうまく動くのでしょうか?
68デフォルトの名無しさん:04/03/20 11:04
>>64
1契約書をテキストファイルで保存
2Excelからそのテキストファイルを開く
3挿入したい位置まで読み込む
4挿入する
以下、3と4を繰り返し、テキストファイルで再保存する。
ワードを立ち上げ再保存したテキストファイルを読み込む
あとは、マクロの自動記録で書式を設定する
こんな流れで以下に作ってみました。
69デフォルトの名無しさん:04/03/20 11:05
Sub test()
Dim strTxt2()
'契約書をtest.txtでテキスト保存します
Open "c:\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, strTxt
ReDim Preserve strTxt2(i)
'1行ずつ配列に入れます
strTxt2(i) = strTxt
i = i + 1
Loop
Close #1
i = 0
70デフォルトの名無しさん:04/03/20 11:06
つづき
'申込書が含まれるファイルを作成します
Open "c:\test2.txt" For Output As #1
'配列の数だけ繰り返します
For i = LBound(strTxt2) To UBound(strTxt2)
Select Case i + 1
'申込書データを挿入したい位置です
Case 1
Print #1, strTxt2(i) & Sheets(1).Cells(1, 1).Value
Case 3
Print #1, strTxt2(i) & Sheets(1).Cells(3, 1).Value
Case 5
Print #1, strTxt2(i) & Sheets(1).Cells(5, 1).Value
Case Else
Print #1, strTxt2(i)
End Select
Next
Close #1
End Sub
>>64
契約書.Docに[%01]という形式の置き換え先指定文字列が入っているとして

Sub ReplaceExcel2Word()
 Dim wda As Word.Application
 Dim wdd As Word.document
 Dim idx As Long
'ワード起動
 Set wda = GetObject(, "Word.Application")
 wda.Visible = True
’ファイル起動
 Set wdd = wda.Documents.Open("契約書.Doc")
 wdd.Activate

'検索して置き換え
 With wda.Selection.Find
  For idx = 1 To 10
    .Text = "[%" & Format(idx, "00]")
    .Replacement.Text = Cells(idx, 1).Value
    .Forward = True
    .Execute Replace:=wdReplaceAll
  Next idx
 End With

End Sub
>>67
Shell("c:tools\bat\" & apr.Value)
73デフォルトの名無しさん:04/03/20 21:17
あの、Filterプロパティって、複合条件の結果を代入することはできないんですか?
ひとつならいけるのに下のようにandでやると型が一致しませんと言われます。

Me.Filter = "[FEE] >=" & frmF And "[FEE] <=" & tF
>>73
どのクラスのプロパティを指しているのかを書け。

その例では文字列同士が同じだったらTRUEを代入することになる

Me.Filter="[FEE]>=" & frmF & " AND " & "[FEE]<=" & tf
75会社員:04/03/20 22:38
>>68,71
ありがとうございます。
会社で試してみます。
7667:04/03/20 22:53
>>72
ありがとうございます
処理できました
77デフォルトの名無しさん:04/03/23 09:18
EXCELでSAVEASを使ってシートをセーブすると、Bookの名前とファイルタイプが
シートをセーブした名前に変わります。
変わらないようにしたいのですが、何か方法はないですか?
今はBoockの名前をBookのSaveasでもとに戻していますが、2重にセーブになります。
7877:04/03/23 09:24
あ、EXCEL2000です。
>>77
SaveCopyAs
80デフォルトの名無しさん:04/03/23 13:19
>79
ありがとう。気がつきませんでした。
81デフォルトの名無しさん:04/03/23 14:51
みんなクラスモジュールってどのくらい使ってますか?
俺はUSERFORM2の設定情報をINIファイルとやり取りする
インターフェイスというか、データの仲介者というか
そんな感じでしか使ってない。
8277:04/03/23 15:03
>79
だめです。SheetにはSaveCopyAsもCopySaveAsもありません。
あー、めちゃ喜んだのに。残念。
テンボラリなbookを作ってsheetをコピーしてから保存すればいいんでは?
8477:04/03/23 17:00
>83
あ、そうですね。それはいいアイデアですね。やってみます。
VBAは初めてなんですが、難しいですねー。

FrameにCommandボタン3つ並んだだけの簡単なOCXを作ってEXCELの
シートに貼り付けたのですが、2回クリックしないと、EVENTが発生しないんです。
VBでテストすると問題ないのですが、Sheetに貼り付けたときは、
一回目のクリックではフォーカスが移るだけで、EVENTが出ないんですよ。
8577:04/03/23 23:18
>83 うまくいきました。ありがとう。
ちなみに
sub CommandButton1_Click()
 Workbooks.add 1
dim w as workbook
set W = Workbook(Workbooks.Count)
Me.copy W.worksheets(1)
W.Worksheets(1).SaveAs "aaa.txt", FileFormat:= xlTextPrinter
W.close savechanges := True
Set W= nothing
end sub
ふう。
86デフォルトの名無しさん:04/03/24 00:32
>>81は無視かyo
冷てーーー(T_T)
8777:04/03/24 18:24
>86
 冷たいと言うより答えようが、、、、
 77も未熟ものだから、答えても参考にならんかも。
  VBAは使ってみて、色色難しいなと思う。
 クラスモジュールやOCXはバグに悩まされると思う。今回
 簡単に使っただけで、相当悩んだ。VBでは全然問題ないのに
 Sheet上で使うと問題がでる。動作はするけど、デバッグで
 ブレークすると、メモリーから飛んでしまう現象もあった。
  そこで、自分なりに結論をだした。
   VBAはグローバル「が」スタンダード。
 つまりグローバルガスタンダードプログラミングがもっともいい。
 この方法は関数などはすべてmoduleごとに分類して、modXXX.bas
 modYYY.basというように、モジュールを山のように並べてプログラミング
 する方法。
  これは構造が簡単なので、言語側のバグの影響がもっとも少ない。
 逆にユーザー側のバグは最も多くなるが、そこは注意力と粘りで解決する。
 
  VBAグローバルガスタンダードプログラミングをためしてみてください。
 VBAに限らず、バグの多い言語では非常に威力を発揮するはずです。
  あまり高度なことを望むと腹が立つだけ損です。
  何事もあきらめが肝心。あきらめたとたんにEXCELがとても便利な
 すばらしいプログラミング環境であることがわかりました。
88デフォルトの名無しさん:04/03/24 22:18
初歩的な質問で申し訳ないのですが、

〜〜〜〜
ActiveCell.FormulaR1C1 = "=b4"
〜〜〜〜
と入れると、セルの中身が='b4'となってしまいます。
これを避ける方法はあるのでしょうか。
まぁ、ワークシートやユーザーフォームもクラスなわけだし
つうか、カプセル化すると必然的にクラスモジュールを使うようになる

グローバル変数をそこらじゅうに書き散らしてあるプログラムなんぞ読みたくない

とはいえVBAは列挙型を公開できないのでつらいものがあるのは事実
>>88
ActiveCell.Formula = "=B4"
9188:04/03/24 22:35
>>90
ありがとうございます。
92デフォルトの名無しさん:04/03/25 00:20
VBA歴1日の超初心者ですが、ヤフーへの自動ログインマクロを
作って居たところ、input name=".save" となっていて、
"objIE.document.all..save.Click"と、
記述すると文法違反になってしまいます。

良い知恵はございませんでしょうか?
>>81

無視されたままでは気の毒なのであまり参考にはならないかもしれないけど
私が行ったことをお知らせします。

某金融系の仕事をしているのですが、ユーザーはEXCELで数値計算や
シミュレーションを行っています。
私が作ったのは、線形計算に用いられる行列などのクラス、
それから確率過程モデリングしたクラスなどです。

行列クラスなどは、継承が使えないで様々な行列クラスに対応した
演算関数と簡易版のどのクラスにも使えるお手軽演算関数の2本立てです。
誰もがメンテナンスを嫌がるのでちょっと後悔してます。

確率過程クラスは、そのカテゴリーのオブジェクト同士の演算はないので
そのような苦労はないのですが、乱数の生成を数種類のものを用意しなければ
ならないのですが、これは実行時に一度だけですむ事から、実行時の型参照
を行っていましたが、結局はj、各確率モデルごとに異なる乱数ルーチンバージョンの
クラスを作ってしまいました。

いずれも本格的な運用が始まるとDLL化して配布しています。
復活&無くなったログ貼り

94 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 15:12
>>89
>VBAは列挙型を公開できないので・・・
そうなの?
自分が違ってるかも知らないが、適用範囲のことですよね?
それとも外部にってこと?


95 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 22:00
質問です
複合化のソフトを使ってPAR→VBAという具合で変換したのに無効になってしまいます
なぜなんでしょうか?
詳しく教えてください
95デフォルトの名無しさん:04/03/30 09:15
セルの書式設定で 数値、小数点以下2桁にしてますが、
0を入力するとスペースになって困っています。
そこでセルの書式をユーザー設定にして#0.00としてみましたがこれでも
やはりスペースになります。
 このシートはシートAですが、おなじような別のシートBでやると
正常に0.00と表示します。
 セルの書式に何かが設定されているようなのです。ちなみに、色々な
セルで試して見ましたが、そのシート全体がどうもおなじ反応をします。
シート全体で設定する何かがあるのでしょうか?どなたか教えてください。
96デフォルトの名無しさん:04/03/30 09:21
 VBAのコンパイルってなんなの?
*.EXEとかができるのでしょうか? 
EXCELを立ち上げたときに初めてコンパイルエラーというのがでて、VBAで
コンパイルしてみたら、バグがいっぱいあって、新発見でした。
>>95
なぜここに質問してくるかがわからんが。。。
オプションでゼロ値を表示しない設定になっとるから
とりあえずそのシートアクティブにしてコレでも実行しとけ
ActiveWindow.DisplayZeros = True

>>96
できるワケがない
コンパイルとはマシン語に翻訳することで EXE を作ることじゃない
VBA はインタプリタ言語で実行時にソースが順次コンパイルされて動作する
9896:04/03/30 12:03
>97
  じゃーVBAにあるコンパイルってのは、なんなの?
 したったらずのMSの名称バグってことね。では正確には
 「マクロの文法チェック」でしょうか?

 
9995:04/03/30 12:17

> なぜここに質問してくるかがわからんが。。。
 あなたしか解決できない難問かもしれないし、、、、。

> オプションでゼロ値を表示しない設定になっとるから

EXCEL2000ですが、TOOL>オプションには「ゼロ値表示しない」なんてのは
ないような、、、、。
EXCELのバグだとおもうのだが。


> とりあえずそのシートアクティブにしてコレでも実行しとけ
> ActiveWindow.DisplayZeros = True

  すごーい!!! いけました。
 ありがとう。

10095:04/03/30 12:38
失礼しました。ウインドウオプションにゼロ値というのがありました。

 これは日本語のエラーで、正確には
 「セル値がゼロのときゼロを表示する。」です。
 しかもウインドウオプションっていう名称もおかしいですね。
>>98
そゆことでいいんじゃない
最近はJavaや.NETの用に中間コードに変換することもコンパイルって言うよ。
インタプリタはソースコードを実行しながら機械語に変換するわけで、
ソースコードを中間コードに変換する作業はインタプリタとはちょっと違う。
中間コードを機械語に翻訳する作業の方がまだインタプリタと言える。
103デフォルトの名無しさん:04/03/31 02:09
>>96
できるツールがあるらしいぞ
http://homepage2.nifty.com/kmado/ksoft.htm ←ここのKstartとかいう奴

シェアウェアらしいし、俺もちゃんと読んでないから実際にはどうか知らんけど
104103:04/03/31 02:20
いやゴメン
タダの見せ掛けだけみたい
起動ランチャみたいな感じの
Excel2k(VB6?)でCreateThreadってやっぱし落ちる?
106デフォルトの名無しさん:04/04/01 23:13
ACCESSで、フォームにパソコン内のファイル選択用の参照ボタンを
つけたいんですけど、簡単に作る方法ってあるんでしょうか?
まさかプログラムで1件1件コンボボックスに追加して作るってわけじゃないですよね?
FileDialog
108106:04/04/02 00:09
>>107
即レスありがとうございます!
ぐぐったらそれらしいのがヒットしたので、さっそくやってみます。
あ〜これで便利になりそう〜どうもでした!
109デフォルトの名無しさん:04/04/02 00:19
VBAファイルって一度でも実行すると他のPCへのコピー時にエラーになる
とかって良くあることなの?
110デフォルトの名無しさん:04/04/02 19:31
Runメソッド使って別ブックのマクロ実行する処理作ってるんだが
別ブックで実行するマクロ処理を
Sub RunTest(ID as string)
処理開始
    ・
    ・
    ・
処理終了
Thisworkbook.close
End sub
みたいな感じにしたら呼び出し元ブックで定義してる変数の中身が何故か
初期化されてしまったんだけどこれは何故かわかる人いますか?
ちなみにThisworkbook.closeをせずにRunTest処理を終わらせてから
ブックを閉じた場合は初期化されなかったんだけど。
指定パスのファイル名を各セルに表示させたいのですが知っている方いたら教えてください。
>>111
A1 セルにパス(例えば C:\Windows)が書かれているとする。
B列にそのフォルダ内のファイル名を書き出す。
ただしサブフォルダと親および自分自身のフォルダは無視する。
下記のマクロを登録して実行する。

Public Sub FileList()
Dim fn As String
Dim i As Long
ChDir Range("A1")
i = 1
fn = Dir("*.*", vbArchive)
While fn <> ""
If Left(fn, 1) <> "." Then
Range("B" & i) = fn
i = i + 1
End If
fn = Dir()
Wend
End Sub
>>112
早速の返事ありがとうございます!
ドライブがc:\とf:\の2つあるのですが、c:\やその配下を見ようとすると必ずf:\のルートを
見に行ってしまいます。
f:\についてはサブフォルダの参照も問題ないのですが・・・
c:\を見に行くにはどうすればいいのでしょうか?
114112:04/04/05 10:43
>>113
Dim i As Long のあとに
ChDrive Range("A1")
を入れてみてください。
>>114
サンクス!
116デフォルトの名無しさん:04/04/05 23:59
checkboxesの引数の値がうまくできてないみたいで
以下の構文ですと、1行目で引っかかってしまいます。
excelのsheet1にオブジェクト名"checkbox1"でチェックボックスオンの状態にしてあります。

If Worksheets("Sheet1").CheckBoxes(1).chekcked = True Then
Worksheets("Sheet1").Cells(1, 1).Value = 22
117悩める者:04/04/06 19:43
ExcelVBAのフォーム上でpictureなどのオブジェクトを
ドラッグアンドドロップするにはどうしたらよいでしょうか?
無理なのかな?
118デフォルトの名無しさん:04/04/08 19:31
Excelのsheet1に入っているデータをsheet2の3箇所にコピーし、
かつ、次のデータがその下に表示されるにはどうすればいいでしょうか?
sheet間のコピーはできるのですが、データが上書きされてしまします。
どこを直せばいいのでしょうか?
下記のVBです。全部は長いので1部分ですが・・・。

Sheets("入力表").Select
Range("N13:R13").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("計算書").Select
ActiveWindow.SmallScroll Down:=15
Range("A25").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Range("A25") = 0 Then
Range("A25").Select
ElseIf Range("A26") = 0 Then
Range("A26").Select
Else
Range("A25").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End If
119デフォルトの名無しさん:04/04/09 00:29
Sheet1のA列に日々の観測データを記録しています。
現在セルA1〜A1000くらいまで1種類1000個のデータがあります。

未使用だったSheet2に、CommandButton1を置いて
Sheet1のデータの算術平均値をSheet2のセルA1に表示するようにしてみました。
Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Sheets("Sheet2").Cells(1, 1).Value = "=AVERAGE(Sheet1!A1,Sheet1!A1000)"
End Sub

このとき、Sheet2のセルA2に"500"と入力してからCommandButton1を押すと
Sheets("Sheet2").Cells(1, 1).Value = "=AVERAGE(Sheet1!A1,Sheet1!A1000)"

Sheets("Sheet2").Cells(1, 1).Value = "=AVERAGE(Sheet1!A1,Sheet1!A500)"
と変えられるようにしたいと考えております。
Sheet2のセルA2の値によって、平均値の計算に使うSheet1のA列のセルの行数を
任意に変えたいと思うのですが、なかなか妙案が思いつきません。

よろしければアドバイスをお願い致します。
>>119
なんの観測データか気になって3行目以降読んでない私。
Sheets("Sheet2").Cells(1, 1).Value = "=AVERAGE(Sheet1!A1,Sheet1!A" & Sheet2.Cells(1,2).Value & ")"

はダメですか?
はじめての裏技 ExcelVBA買いました 1890円ですた。
リファレンス型でなおかつ目的別にVBAが記載されてまして、ちゃんとコード例も載ってます。
なかなかいい感じの本なのでここに紹介をさせて頂きます。

御聴講ありがとうございました
>>119
すなおに計算。
Private Sub CommandButton1_Click()
Dim sum As Double
Dim i As Long
Dim n As Long
Sheets("Sheet2").Activate
sum = 0
n = ActiveSheet.Range("A2")
For i = 1 To n
sum = sum + Sheets("Sheet1").Cells(i, 1)
Next i
ActiveSheet.Range("A1") = sum / n
End Sub
>>118
どこに何をコピーしたいの?
125116:04/04/09 23:05
Checkboxesって引数として変数を取ることはできないのでしょうか?
以下の構文ですとChecboxes(i)でエラーになります。

Dim i as Integer
i = 1
If Worksheets("Sheet1").Checboxes(i) = True Then
Worksheets("Sheet1").Cells(1, 1).Value = 22
End If
>>125
素直にvalueを参照しる。
127デフォルトの名無しさん:04/04/14 14:25
オートフィルタを仕様して、A列に「1」が入ってるものを抽出して
抽出したデータにだけ、B列に「2」と入れたいのですが、
どうすればいいですか?
128デフォルトの名無しさん:04/04/14 15:24
EXELのVBAにて
単価(既定)と数量(ComboBoxで選択)にて合計(Select Caseで表示)
を表示できるようにしたいのですが、ComboBoxで数量を選択しても合計値が
リアルタイムで表示されません。
毎回、VBEの方でプレイボタン(実行)を押さないとワークシートに反映されません。
どうしたらよいでしょうか?
>>128
Select caseは制御構造で何かを表示したり云々な機能はないよ。
130デフォルトの名無しさん:04/04/15 09:48
>>129
ありがとうございます!
131デフォルトの名無しさん:04/04/15 12:43
>>124
Sheets("入力表").Select
Range("N13:R13").Select
↑このN13:R13のデータを
("計算書")Sheetの
 A25から始まって、順に下に表をつくるように
データを転記させたいのです。

 気づくのに遅くなってごめんなさい!
>>131
Sheets("入力表").Range("N13:R13").Copy Sheets("計算書").Range("A25")
133132:04/04/15 20:27
>>131
おっと、こーゆー意味か?

Dim i As Long
For i = 14 To 18
Sheets("計算書").Cells(11 + i, 1) = Sheets("入力表").Cells(13, i)
Next i
134デフォルトの名無しさん:04/04/15 21:05
EXELにおいて、例えば
textbox1に表示されたデータと全く同じものを
別のセルに表示させるにはどうすればよいのでしょう?
例えばtextbox1が[1000円]だったらD1も[1000円]
textbox1が[2000円]に変わったらD1も[2000円]とリアルタイムに表示させたいのです。
どなたかよろしくお願いいたします。
135デフォルトの名無しさん:04/04/15 22:36
textbox1のchangeイベントに
range("D1").value = textbox1.value
とかいう風にすれば
テキストボックスの値が変わるとセルD1の値にも反映される
136デフォルトの名無しさん:04/04/16 10:08
>>135
ご親切にありがとうございます!!
137デフォルトの名無しさん:04/04/16 11:14
ワークシートの数が1つより多い時は1つにしたいのですが、

For i = 1 To Worksheets.Count - 1
Worksheets(2).Delete
Next i

とすると削除しますか?というダイアログがでてしまうので
それをでないようにしたいのですが、なにか方法はあるでしょうか?
>>137
DisplayAlerts プロパティ
139デフォルトの名無しさん:04/04/17 00:20
目次・索引を自動で取得するマクロを作りたいと思います。
キーワードを検索し、そのキーワードがあるセルのページ番号(印刷のページ番号)を
読み込みたいのですが、何かいい方法ないですか?
140デフォルトの名無しさん:04/04/17 00:55
>>139
ちょっと文章が分かりにくい
もうちょっと詳しく書いて

ページ番号って対象のあるセルのあるシート番号ですか?
>>140
>ページ番号って対象のあるセルのあるシート番号ですか?

ちゃんと読んでやれ。
142デフォルトの名無しさん:04/04/17 17:52
>>139 こんなんでいかがでしょうか。
Sub test()
'キーワードがあるシート
Sheets(1).Activate
ActiveWindow.View = xlPageBreakPreview
i = 0
For Each pb In Sheets("work").HPageBreaks
If pb.Type = xlPageBreakAutomatic Or pb.Type = _
xlPageBreakManual Then
ReDim Preserve lngRow(i)
lngRow(i) = Sheets("work").HPageBreaks(i + 1).Location.Row
i = i + 1
End If
Next
strMsg = "検索したい文字を入力してください"
strVal = InputBox(strMsg, "入力", "テスト")
'キーワードがある列
Set c = Columns("A:A").Find(strVal, LookIn:=xlValues, LookAt:=xlWhole)
c.Activate
lngRow2 = Selection.Row
For j = UBound(lngRow) To 0 Step -1
If lngRow2 >= lngRow(j) Then
Exit For
End If
Next
MsgBox j + 2 & "ページ"
End Sub
キーワードのある列をA列に限定してるけど、それでいいのかな?
限定しないとすると、VPageBreaks も拾ってやらんと行けなくなるけど。
144VBVB:04/04/17 19:58
VBでエクセルを立ち上げているのですが、ユーザーが勝手に
EXCELを落として、VBがアクセスエラーすると「バグじゃー」と
騒ぎます。
 EXCELをユーザーには終了させないようにすれば、騒ぎが
とまるのですが、どうすればいいのでしょうか?
145VBVB:04/04/17 20:49
Workbook_BeforeClose(Cancel As Boolean)
で終了できないようにはできる。
ペケの場合は終了できない。VBからは終了できる。
そのためには、VBから終了フラグをセットしてやればいい。

 これでOK完成とおもったが、問題がある。
EXCELで終了中に終了のキャンセルをした場合は、
VBは終了したと思っているのに、EXCELは残っている。
どうする?
146デフォルトの名無しさん:04/04/17 21:25
>>142

ありがとうございます!
助かりました。


詳細を述べますと
1ブックに20シートぐらいあるファイルを
検索しページ番号を抜き出したいのです

1シートのページ番号は142さんのやり方で出来きますが
シートをまたいだページ番号取得も出来ますでしょうか?

それとページが1ページしかないシートがエラーになりますが
これも対応出来ますでしょうか?
147VBVB:04/04/18 07:20
Cancelとる方法みつかりました。 サンキュー。
VBAは難しいね。
>>146
おいおい、全部やってもらう気かよ。
149デフォルトの名無しさん:04/04/18 23:46
>>132
ありがとうございました!! 無事に内容が転機されて、
前のデータも消さずにいきました!!
 ありがとうございます!
150デフォルトの名無しさん:04/04/19 11:34
comboboxで数値(●●円)を選択する場合、
選択後もボックス内に「〜円」と単位を表示させるにはどうしたらよいのでしょう?
現段階だとcomboboxでリスト選択するときは「円」が表示されていますが
選択後は数字だけとなってしまいます。
よろしくおねがいいたします。
151デフォルトの名無しさん:04/04/19 15:04
>>150
現段階のコードはどのようになってますか?
コンボボックスのスタイルは?fmstyledropdowncombo?


152150:04/04/19 15:43
>>151
コードはイジってません(以下)。コンボボックスを右クリック→
プロパティで行っています。
Private Sub ComboBox62_Change()
End Sub

スタイルはfmstyledropdowncomboです。

すみません、よろしくお願いします。。
153デフォルトの名無しさん:04/04/19 16:23
指定したセル(表の見出しにしている)の入力を禁止するにはどうすればよいのでしょうか?
154デフォルトの名無しさん:04/04/19 16:28
エクセルしかしらないのだけど、WORDでかいた様式ファイルから
エクセルのデータを出力したい場合、どのようにマクロ書けばいいのですか?
>>153
シートに保護をかける。
>>152
こんなかんじでどうでしょう。「円」の後ろに半角スペースを入れてください。
Private Sub ComboBox1_Click()
ComboBox1.Value = ComboBox1.Value & "円 "
End Sub
157150:04/04/20 09:51
>>156
ありがとうございます、
Private Sub ComboBox62_click()
ComboBox1.Value = ComboBox1.Value & "円"
End Sub
を試してみたのですが、コンボボックス1には「100円円」と
円が二つ繋がってしまいます。また、単価と数量と合計も示しているのですが
このコードを挿入すると合計が#VALUEとなってしまいました。

お手数かけてもうしわけありません。
158150:04/04/20 10:16
補足
「100円円」と表示されたのは、コンボボックスのプロパティで
選択した範囲にユーザー定義で「円」を表示させていたためでした。
よってユーザー定義を解除したところ、コンボボックスには「100円」と
表示されましたが、単価*数量=合計 の合計は#VALUEのままです。

説明が下手で申し訳ありません、宜しくお願いいたします。
159デフォルトの名無しさん:04/04/20 10:18
とりあえず
×
Private Sub ComboBox62_click()
ComboBox1.Value = ComboBox1.Value & "円"
End Sub


Private Sub ComboBox1_click()
ComboBox1.Value = ComboBox1.Value & "円"
End Sub

160156:04/04/20 11:37
>>158
セルのユーザー定義を解除しなくても、「円」の後に半角スペースを入れると「円」と表示されると思うのですが。半角スペースがないと「円円」と表示されます。何でなんでしょうね。
シート1のB1が単価(コンボボックスの値)として試してみてください。
Private Sub ComboBox62_Click()
ComboBox62.Value = ComboBox62.Value & "円 " '←円の後ろに半角スペース
 Sheets(1).Range("B1").Value = Left(ComboBox62.Value, Len(ComboBox62.Value) - 2)
End Sub
161150:04/04/20 13:55
>>160
度々本当にありがとうございます。お教え頂いたものをペーストしてみましたが、
やはり合計額が#VALUE!になってしまいます。。
しかし新しいワークシートにて最初から作成したところ、しっかり
単価*数量=合計が表示され、単価のコンボボックスにも「〜円」が表示されました。

コードやプロパティを見直してみても、どこがおかしいのかわかりませんが
教えてくださったコードを挿入しなければ、「円」は表示されませんが合計は
エラーになりません。。

ご丁どうしたらいいでしょう(笑
162156:04/04/20 19:33
>>161
Private Sub ComboBox62_Click()
msgbox Left(ComboBox62.Value, Len(ComboBox62.Value) - 2)
End Sub
これを実行した時に数字だけが表示されるはずですが、いかがでしょうか。もう少しフォームの仕様とかを詳しく書いていただくと、わかるかもしれません。
163デフォルトの名無しさん:04/04/21 16:08
Excel VBAマクロで以下の方法をご教授いただければ幸いです。

CommandButton1を押したときに、B3セルからE15セルまでの範囲を指定して
カンマ区切りのcsv形式で保存することを考えております。
>>163
Private Sub CommandButton1_Click()
Range("B3:E15").Select
ActiveWorkbook.SaveAs FileName:= _
"Book1.csv", FileFormat:=xlCSV
End Sub
165150:04/04/22 09:33
>>162

ありがとうございます。そのコードを実行したところ、
「実行エラー5 プロシージャの呼び出し、または引数が不正です。」と表示されました。以下にもう少し詳しく記載させていただきます。

sheet2の
I13からI15まで「100,200,空欄」の3つを記入し、これを「単価」として名前を定義。
同じくSheet2のF2からF12まで「空欄,1〜10」の11個を記入し、これを「数量」として名前を定義。
次にSheet名「計算表」にて
単価のComboBox62はC96に配置し、Linked cellにC96、ListFillrangeに「単価」を挿入。
数量のComboBOx51はD96に配置し、Linked cellにD96、ListFillrangeに「数量」を挿入。
D96に「=C96*D96」を挿入。

知識不足、説明不足で申し訳ありません、宜しくお願いします。
166デフォルトの名無しさん:04/04/22 14:08
>>164

文字列以外のセルは#REF!って表示されません?
>>166
セルの大きさが小さいだけ
セル幅を広げりゃ万事解決
168156:04/04/22 22:13
>>165
ComboBox62のLinked cellを削除し、以下のコードを貼り付けていただくとどうなるでしょうか。
Private Sub ComboBox62_Click()
ComboBox62.Value = ComboBox62.Value & "円 " '←円の後に半角スペース
Sheets("計算表").Range("C96").Value = Left(ComboBox62.Value, Len(ComboBox62.Value) - 2)
End Sub
>>164
エクセル2000ですが、選択された部分だけでなく、アクティブなシート全体の値が保存されませんか?
>>169
あ、ほんとうだ。

新しいマクロの記録で、
(1) B3:E15 を選択・コピー。
(2) シートを1枚追加。
(3) 追加したシートの A1 にペースト。
(4) CSV で保存
をやって、そのコードを
Sub CommandButton1_Click() 〜 End Sub の
間に貼りつける。
Access の .mdb ファイルを OpenCurrentDatabase で開くと、
「起動時のオプション」で、「フォーム/ページの表示」で指定してある
フォームが開いてしまうのですが、これを開かないようにする方法ってありますでしょうか?
いろいろ調べたつもりなんですが、わかりませんでした;;
>>171
開かない方法はわかりませんが、私はこんな感じでやっています。
Dim objAC
Set objAC = CreateObject("Access.Application")
objAC.OpenCurrentDatabase "c:\tmp.mdb"
objAC.DoCmd.Close 2, "Fmenu",2 '開いたメニューを閉じます
objAC.run "abc" '続いて実行したいマクロ
Set objAC = Nothing
>>172
今まで、OpenCurrentDatabase の直後に Visible = false って方法でやってたんですが、
お教えいただいた方法でも、一瞬、チラッとフォームが見えちゃいますね。
社内向けツールなんで、「仕様です」のひとことで済ますことにします。
う〜ん、残念。
すみません。EXCELのセルの中に「A_B_C…」とか入ってるのを
各セルにある文字をキーにして(この場合「_」がキー)
「A」「B」「C」の様に入れることはできるでしょうか?
SUBSTITUTE関数を使ってもTABコードがうまくいかないのですが…

宜しくお願いします。
175150:04/04/26 21:34
>>168
ありがとうございました!できました!!
176デフォルトの名無しさん:04/04/27 22:50
マクロをいくつか作ったのですが、それを結合するのが大変なので自動で次のマクロに
移動できるようにしたいです。
どうすればよろしいでしょうか?
>>176
Call
178デフォルトの名無しさん:04/04/28 19:17
良スレ∩゚∀゚∩age
179デフォルトの名無しさん:04/04/28 19:23
どなたか教えて下さい。

折れ線グラフで、マーカーの部分にカーソルを重ねると「系列 "A株式会社" 要素 "100" 値 "300"」
のような感じで表示されますが、別のデータをグラフの元となっているセルから引用して表示させたい
と思っています。
例えば「系列 "A株式会社" 要素 "100" 値 "300"  内容 "○○○"」のような感じで「内容 "○○○"」
を追加したいと思っています。どなたかご存知でしたら教えて下さい。
180デフォルトの名無しさん:04/04/29 22:07
重回帰分析をエクセルの分析ツールではなく、VBAでやりたいのですが、
何か良い関数はないでしょうか。
181デフォルトの名無しさん:04/04/29 22:18
Excel VBA(VBのバージョンは6.0)での質問です。

例えばセルA1に文字や数字を打ち込んだ後に、他のセルをアクティブに
しようとした瞬間に(A1がアクティブのままでということ)、メッセージボックスを
出す事って可能でしょうか?
WorkSheet_Changeでは無理っぽいのですが・・・。

ご存知の方よろしくお願いいたします。
>>181
元の位置がアクティブなままと言うのはないみたい。
何をやりたいのかよくわからんが、元の位置に何かしたいということなら、Worksheet_SelectionChange でせっせと元の位置を覚えておけばいいと思う。

Private OldRange As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not OldRange Is Nothing Then
  OldRange.Font.Color = RGB(0, 0, 0)
 End If
 Set OldRange = Target
 Target.Font.Color = RGB(255, 0, 0)
End Sub

とやれば、選択しているところのフォントだけが赤くなるよ。
183デフォルトの名無しさん:04/05/04 18:59
質問です。

テキストボックスに入力したデータをA5のセルに表示する方法を教えてくださいませんか?
>183
テキストボックスに入力したデータをCtl+Cでコピーして
A5のセルCtl+vでペースト
>>183
Cells("A5).Value = Edit1.value
186デフォルトの名無しさん:04/05/05 11:15
質問させて下さい。
ExelのVBAで簡単なプログラムを作りました。
内容はセルの内容を貼り付けたり切り取ったりを繰り返すだけの物です…。

ところが内容を付け加えていくうちに急に処理が重くなり,当初より10倍以上の時間が掛かるようになってしまいました。
プルグラムが長くなりすぎたのかと思い,試しに付け加えた部分を削除してみましたが,やはり遅いままでした。
このような状態の解決法は何かあるんでしょうか?
ご教授よろしくお願いします。
取りあえず時間のかかってる処理はどこか探ってみては?
ふざけたループが廻ってたりとか。
188デフォルトの名無しさん:04/05/05 11:21
処理が無駄に循環しているとか?
189デフォルトの名無しさん:04/05/05 11:35
いえ,プログラムの内容と言うよりは,根本的に一つ一つの操作(C&Pなど)が遅い状態です。
ウィルスチェックがかかってないかな?
191186:04/05/05 14:00
もちろん常駐はしていますが,スキャン中など,システムに負荷が掛かる状態ではありません。
ちなみに他のPCで試してみても同じ状態です。
192デフォルトの名無しさん:04/05/05 14:22
普通のBASICしかやったことなくてVBAに挑戦しようと思っているのですが、
このスレに張り付けられているコードを見たところ
文と文の区切り文字が使われていないみたいなんですが
:は付けたらいけないのでしょうか?あっても問題ないのでしょうか?
193192:04/05/05 14:25
ごめんなさい。
やってからこい!って言われる前にやってみました。
あっても問題ないんですね。
スッキリしました。スレ汚し巣マソ
>>191
usedrangeを使った時に処理が遅くなった経験があります。見た目はデータがないのに、その部分まで対象になっていたので処理が遅くなっていました。
195186:04/05/05 20:48
んー
そのケースには該当しないようです。
>>192
ん〜〜 もしかして行末に全部 : つけてるとかw
197186:04/05/06 01:32
解決しました
198186:04/05/07 00:36
>>197
誰だおまえは?
199KAKA:04/05/07 11:55
すいません。教えてください。
最近VBをはじめた初心者です。
くだらない質問なんですが、
VBとVBAの基本的な違いは何ですか?
箇条書きで構わないので、メリットとデメリットを
教えてください。
お願いします。
すいません。教えてください。
最近セックスをはじめた初心者です。
くだらない質問なんですが、
セックスとアナルセックスの基本的な違いは何ですか?
箇条書きで構わないので、メリットとデメリットを
教えてください。
お願いします。
201デフォルトの名無しさん:04/05/07 12:52
>>199
VBAは,各アプリケーション固有(ワード,エクセル等)の
マクロ処理言語として提供されています。
パッケージ版のVBとの違いは,パッケージ版VBは単体で
動作することを前提としたプログラムを作成しますが,
VBAの場合は,それが組み込まれているアプリケーション
(エクセル,ワードなど)の上で動作します。
203KAKA:04/05/07 17:30
>>202
ありがとうございます。
まだまだ勉強が足りませんでした。
204デフォルトの名無しさん:04/05/09 10:37
Access2000で、フォーム上でのスクロールによるレコードの移動を禁止したいのですが。
Accessでその機能が無いようなので、VBAで行うとすれば、
マウススクロールを無効にするようなコードってありますでしょうか?
205デフォルトの名無しさん:04/05/10 12:36
a
マウススクロールってホイル? 2000でも出来るかな?
http://support.microsoft.com/default.aspx?scid=kb;ja;308636#appliesto
207デフォルトの名無しさん:04/05/10 21:25
>>206
有り難うございます!
リンクをヒントに探したらこんなのも見つかりました。
http://support.microsoft.com/default.aspx?scid=kb;JA;278379

・・・後半部分が美味しそうなのですが、日本語が壊れています・・・(汗
ACCESS2000/VBAについて質問させてください。

テーブルをエクセル形式にエクスポートした際にEXCEL5.0/95形式で

保存されてしまうのですが、2000形式の保存を行う方法はありませんか?

現状:
DoCmd.OutputTo acTable, "EXP", "MicrosoftExcel(*.xls)", "C:\test.xls", False, ""
>>208
excelオブジェクト作って読み込ませて保存。

とか適当に言ってみる。
210デフォルトの名無しさん:04/05/12 00:48
ご教授お願いします。
Pingの応答確認をしたいのですが。例えばA1にIPアドレスを入力し、
マクロ実行後、A2に○or×を表示させたいのですが。
よろしくお願いします。
>>210
ICMPを扱えないといけません。rawソケットでできるかな?できないかな?みたいな。

と適当
>>210 こんなんでどう? バッチ利用で○×じゃないけど。(ひょっとするとWin98/Meは無理だっけ?)
Public Function IPTest(IP As String) As Boolean
On Error Resume Next
Dim F As Integer, RetCode As Integer, CR As String
CR = Chr(13) & Chr(10)
F = FreeFile
Open "IPTest.Bat" For Output As #F
Print #F, "@Echo Off" & CR & "Ping -n 1 -w 1 " & IP & " > Nul" & CR & "Echo %ErrorLevel% > Res.Txt"
Close #F
Shell "IPTest.Bat", vbHide: Do: DoEvents: DoEvents: DoEvents: DoEvents: DoEvents: Loop While Dir("Res.Txt") = ""
Kill "IPTest.Bat"
F = FreeFile
Open "Res.Txt" For Input As #F
Input #F, RetCode
Close #F
Kill "Res.Txt"
IPTest = IIf(RetCode = 1, False, True)
End Function
213210:04/05/13 02:53
>>211
>>212
ありがとうございます。
早速試してみます!
214デフォルトの名無しさん:04/05/13 08:12
Public Sub Workbook_Open()
Timerloop
End Sub
Sub Timerloop()
Call ThisWorkbook.TimerProc '
Application.OnTime Now + TimeValue("00:00:1"), "Timerloop"
End Sub

 VBAで1秒周期で処理をさせたいTimerProcを上記のように実装しています。
ところが
 シートラベルをクリックしてシート名称が変更できる状態にすると
この処理が停止します。
 エラーでもないのにEXCELが中断モードになるのだと思いますが、
なにか回避する方法はないものでしょうか?
215214:04/05/13 13:53
よくわからんけど、解決した。
しかし、シートラベルをクリック(ダブル)するとシート名変更の
モーダル画面が出るようになった。 モーダル画面中はタイマーは止まるが
画面を消すともとどうり動作するようになった。

216デフォルトの名無しさん:04/05/13 15:30
Public VsH(100) as doubleとかいっぱい配列を宣言したら固まるんですけど限界とかあるんですか?
またおまえか!
218デフォルトの名無しさん:04/05/13 21:29
>216
100だったら固まらん。 100000000ぐらいにしてみたら。
219デフォルトの名無しさん:04/05/13 22:39
ACCESS 2000の質問です。
サブフォーム内のテキストボックスにテーブルの項目を関連づけました。
任意のテキストボックスにフォーカスを当てることはできたのですが、
テキストボックスのプロパティを変更することが出来ませんでした。
1レコード目はテキストボックスを使用不可にし、2レコード目を使用可にすること
はできないのでしょうか?

220デフォルトの名無しさん:04/05/13 22:58
>>218
うましか
221デフォルトの名無しさん:04/05/16 23:15
VBをしらなくとも、
EXCEL VBA関連の本を読んで、できるものでしょうか?
>>221
できないなら覚えればいい。って言う話ですな
誰でも最初は初心者だった。
>>221
漏れはVBは触ったことがないけど、EXCELのヘルプを読みまくって、なんとか作れるようになったよ。
まぁ効率悪いところはいろいろあるんだけどさ。
>>222-224 ありがとう
>221
漏れも最近始めた。
まぁがんがっていこうや (´∀`)
質問です。
EXCELでセルをクリックしたときにイベントを発生させたいのですが
どのようにすればよろしいのでしょうか。
よろしくお願いします。
228227:04/05/18 11:29
解決しました。
すみませんでした。
229デフォルトの名無しさん:04/05/21 14:45
Excelで文字列処理をするとき、ターゲットファイルを選択にgetfilepath()を
使っています。ただデフォルトで開くディレクトリがマイドキュメントに
なってしまうので、できればカレントを表示させたいのですが、良い方法はありますか?
230229:04/05/21 14:51
スマソ
ミスってしまった
getfilepath()じゃなくてApplication.GetOpenFileName です
231229:04/05/21 15:42
重ね重ねスマソ
こんな風にしたらできますた

Function OpenLogFile() As String
Dim varFullPath As Variant
Dim i As Integer
Dim myPath As String
Dim myDrive As String

myPath = Application.ActiveWorkbook.Path
i = InStr(myPath, "\")

If i < 3 Then
OpenLogFile = ""
MsgBox "ネットワークから起動するときはドライブを割り当ててください", vbOKOnly + vbExclamation
GoTo No_UNC
End If
myDrive = Left(myPath, 2)
ChDrive myDrive
ChDir myPath
varFullPath = Application.varFullPath = Application.GetOpenFileName _
("ログファイル (*.log; *.txt),*.log;*.txt")
No_UNC:
OpenLogFile = varFullPath
End Function

A:\〜Z:\まで必ず\が3文字目にあることを利用してChDriveをした、と
オナニー見せつけて申し訳ない
>>231
で、UNCはどうするの?
>>231

'モジュールレベルで宣言
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" _
(ByVal lpPathName As String) As Long

'カレントドライブとフォルダの変更(ネットワーク対応)
Function OpenLogFile() As String
  Dim varFullPath As Variant

  Call SetCurrentDirectory(Application.ActiveWorkbook.Path)
  varFullPath = Application.GetOpenFilename("ログファイル (*.log; *.txt),*.log;*.txt")
  OpenLogFile = varFullPath
  If varFullPath = False Then OpenLogFile = "" 'キャンセルされた場合
End Function
234207:04/05/23 12:23
Access2002にて、
http://support.microsoft.com/default.aspx?scid=kb;JA;278379
を利用し、マウスのスクロールによるレコード移動を禁止したところ

フォームのテキストボックスでEnterキーを押すとTabキーのように
次の入力ボックスへカーソルが移動するようになってしまいました。
(それまではテキストボックス内でEnterをおすと改行してました)
オプション設定で「移動しない」にしても、本当に何も起きません。

Ctrl+Enterで改行することは出来るのですが、
使用者がPC初心者のため、普通にEnterで改行出来るようにしたいのです。
Enterを押すと Ctrl+Enterが送られるようにするとか出来る物でしょうか?
236デフォルトの名無しさん:04/05/23 19:06
Outlook2002でメール作成をWord2002で行う設定をしています。
メール作成中Word2002のマクロで、メールの形式をテキストに
変更するマクロを書きたいのです。
どなたかお助けください。

HTMLメールへの返信をテキスト方式で行う際に、整形する
マクロを作ったのですが、テキスト方式にするためのプルダウン
コントロールへのアクセスの仕方がわからんです。
>>236
マクロ記録じゃダメでつか?
238デフォルトの名無しさん:04/05/23 21:44
あのー、困ってるので教えてください、エロイ人。
Excelで例えばセルA1に入力されてる文字列中に半角文字があるかを調べるには
どんなコードを書いてやればよいのでしょうか?

239デフォルトの名無しさん:04/05/23 21:45
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
>>238
関数があるかどうかは知らん。

unicodeだから単純に半角文字コードか否かを見るだけでも判断可能。
>>238
'半角チェック関数
Function CheckNarrow(Address As String) As Boolean
'戻り値 True:半角文字がある False:半角文字は無い
&ndsp;&ndsp;Dim CheckString As String
&ndsp;&ndsp;CheckString = Range(Address).Value
&ndsp;&ndsp;CheckNarrow = (CheckString <> StrConv(CheckString, vbWide))
End Function

'↓使い方
Sub StartCheck()
&ndsp;&ndsp;If CheckNarrow("A1") Then
&ndsp;&ndsp;&ndsp;&ndsp;MsgBox "半角があります。"
&ndsp;&ndsp;Else
&ndsp;&ndsp;&ndsp;&ndsp;MsgBox "半角はありません。"
&ndsp;&ndsp;End If
End Sub
>>241
なるほど。
間違えた・・・_| ̄|○

'半角チェック関数
Function CheckNarrow(Address As String) As Boolean
'戻り値 True:半角文字がある False:半角文字は無い
  Dim CheckString As String
  CheckString = Range(Address).Value
  CheckNarrow = (CheckString <> StrConv(CheckString, vbWide))
End Function

'↓使い方
Sub StartCheck()
  If CheckNarrow("A1") Then
  &ndsp;&ndsp;MsgBox "半角があります。"
  Else
  &ndsp;&ndsp;MsgBox "半角はありません。"
  End If
End Sub

今度はどうだ!
>>243
引数はセルの位置ではなくて評価する文字列にした方が汎用性が上がると思うよ。
ndspじゃなくてnbspだった・・・何度もすまん。
>>244
そうですね。言われてみればそうだ・・・。
フォローサンクス!
一部直しわすれてた。。・゚・(ノД`)・゚・。ウエエェェン
ついでに引数を文字列に変更しました。今度こそいいよね。

'半角チェック関数
Function CheckNarrow(CheckString As String) As Boolean
'戻り値 True:半角文字がある False:半角文字は無い
  CheckNarrow = (CheckString <> StrConv(CheckString, vbWide))
End Function

'↓使い方
Sub StartCheck()
  If CheckNarrow(Range("A1").Value) Then
    MsgBox "半角があります。"
  Else
    MsgBox "半角はありません。"
  End If
End Sub
関数にするまでも無いことに気付いた・・・_| ̄|○
>>248
いやいや、可読性、再利用性、修正箇所の減少etcetc大事なことですよ。
250デフォルトの名無しさん:04/05/23 23:46
>>237
Outlookはマクロの記録ができません。
で、この操作はWordでも記録できません。
>>250
じゃあヘルプひけって話になる訳ですね。
252デフォルトの名無しさん:04/05/24 04:53
>>241-249
おおお、ありがとうございます。
vbWideなんて定数があったんかぁ。
ソースまで頂いちゃって、乙です。m(_ _)m
>>251
で、ヘルプでもGoogleでも全く引っかからないんです。(はぁと
254デフォルトの名無しさん:04/05/25 16:39
VBAでコードを検索しようとして検索画面を出し、文字列に漢字とかを2文字以上で打つと、
その2バイト文字の1バイト目のみが送られ、別の漢字に変わったりするんですが、解消方法知ってる方いませんか?
VB本体、他のアプリでは問題なく、ATOK,IMEどちらも同じ症状です
>>254
意味が分からん。ATOKだってIMEだ。
>>255
すんません、MS-IMEでもという意味でした
具体的には、VBA Editorで書いたコードを検索しようとしてCtrl+Fで検索画面を出すじゃないですか
そこの検索文字列に例えば、"数量"と入れると"雛"と表示されるんです
数量がS-JISで文字コード"9094 97CA"、雛が"9097"
数と量、両方の2バイト目が省かれた漢字が入力されてる感じなんです
>>254にも書いた通り、他のアプリ(VBとか)の検索画面では全く問題ないんです
257229:04/05/26 12:16
ああレス付いているとは思わなかったので遅レス大変申し訳ない

>>233
おお!そんなAPIがあったとは知らなかった
UNC形式でのカレントディレクトリ変更もばっちり動きました
スマートなのでこちらに書き換えします
ありがとうございました

258デフォルトの名無しさん:04/05/26 23:41
仕事で、エクセルに50〜100個のデータを入力するのですが、途中でどのセルに値を入力したのかわからなくなることが多く、困っています。
ちなみに入力が必要なセルはきっちりと順番に並んではいません。
そこで、
 1、再入力が必要なセルにあらかじめ色をつけておき
 2、値を再入力すると通常の色に戻る
というようなことができないかと考えているのですが、マクロで実現できないでしょうか?
>>258
条件付き書式でもある程度戦えると思った。
>>258
Private Sub Worksheet_Change(ByVal Target As Range)
  Target.Interior.ColorIndex = xlNone
End Sub
>>256
Office XPじゃない?
うちでも発生するからバグだと思うが
ただ技術情報にも出ていない
面倒だから問い合わせていないけどMSに問い合わせた方が宜しいね
262デフォルトの名無しさん:04/05/28 00:58
私、VBA初心者です。
すいません。教えてください。
VBAでファイルを名前を変えて保存を実施するのに、名前を
20040527という風に4桁2桁2桁表示にしたいのですが、どうしてもうまく
いきません。
現在、設定しているのは
date = Year(Date) & Month(Date) & Day(Date)
というのを使用して、形式をいろいろ変更しているのですが、
どうしても月と日が2桁で保存できないのです。
どうやって、4桁2桁2桁の名前で保存できるのでしょうか?
263デフォルトの名無しさん:04/05/28 01:08
>>262
Format(DateSerial(2004, 5, 28), "yyyymmdd")
264デフォルトの名無しさん:04/05/28 01:20
>>263
ありがとうございます。うまくできました。
265デフォルトの名無しさん:04/05/28 01:29
262です。
う、、やっぱりうまくいきませんでした。
修正エラーって言われてしまいます。
266デフォルトの名無しさん:04/05/28 01:39
>>265
>>263じゃないし、漏れもあんま詳しくないけど
日付型だとまずいんでない?

Cstr(Format(DateSerial(2004, 5, 28), "yyyymmdd") )とかは?
267263:04/05/28 02:17
>>265
Date はシステム日付を取得する関数だが
Date =...と書くとシステム日付を変更するステートメントになる。変数ではないので変数名を変えなされ。
もし今日当日の日付のファイル名を作りたいなら↓みたいな感じか?

Dim Filename as String
Filename = Format(Date, "yyyymmdd")
Open Filename for...

--------------------------------以下ヘルプより
Date ステートメント
 現在のシステムの日付を設定するステートメントです。
構文
  Date = date
Microsoft Windows 95 で実行されるシステムの場合は、1980 年 1 月 1 日〜2099 年 12 月 31 日の
範囲の日付を指定する必要があります。Microsoft Windows NT で実行されるシステムの場合は、
1980 年 1 月 1 日〜2079 年 12 月 31 日の範囲の日付を指定する必要があります。
Macintosh の場合には date に1904 年 1 月 1 日 〜 2040 年 2 月 5 日の範囲の日付を指定する必要があります。.
268263:04/05/28 02:22
つーかVBAでスシテム日付を変更してはいかん。
>>267
1970 1/1なUNIX時間じゃ無いんですね。
270デフォルトの名無しさん:04/05/28 10:30
>260
遅レスすんません。
色を無色にする操作はそれでできますね。
理想を言えば、値を入力してEnterを押した瞬間色が変わってほしいのですが
Enterのタイミングに合わせてマクロが動くようにするのはやっぱり無理でしょうか?
271デフォルトの名無しさん:04/05/28 20:27
>>266
やはり修正エラーがでてしまいます。。。
>>267
そうです。毎日のファイルを吐き出したいため、日付フォーマットで保存し、
読み出すときもその日のファイルを読み出すために作成しているのです。

>Dim Filename as String
>Filename = Format(Date, "yyyymmdd")
>Open Filename for...
こうする場合は、Filenameの変数はどうやって日付の値を取得するのでしょうか?
Filename = Year(Date) & Month(Date) & Day(Date)
Dim Filename as String
Filename = Format(Date, "yyyymmdd")

で定義してみましたが、やはり仮に本日ならば、20040528にはならず、
2004528となってしまいます。
Date関数を使うとだめなのでしょうか?
変数の宣言を先にしてみては?

Dim Filename As String
Filename = Year(Date) & Month(Date) & Day(Date)
Filename = Format(Date, "yyyymmdd")
>>271
これではいかが?
Filename = Year(Date) & Right("0" & Month(Date), 2) & Right("0" & Day(Date), 2)
VBAでファイルを読み込んで処理をするのですが、テキストファイルだと中身の生データを読まれてしまいます
暗号化などよい方法はないものでしょうか?
これで

Dim Filename As String
Filename = Format(Date, "yyyymmdd")
Range("A1").Value = Filename

A1に"20040528"が表示されるから
Filenameには希望通りの値(文字)が入ってると思うんだけど
(WinXP+Excel2003)
>>274
基本中の基本は、ある数とのxorを取ること。

A xor B = C
C xor B = A

VBAならパスワード付きファイルにデータを保存したりするのが楽ちんな気もします。
>>276
ありがとうございます
暗号化したいのは文字列なんですが、アレンジして使えそうです
>>270
次のセルに移動すると同時に色が変わりませんか?
どんな感じになってるんですかね。
279デフォルトの名無しさん:04/05/29 14:01
>278さま
すいません。
ものすごく初心者なので、せっかく書いていただいた>260をどう使えばいいのかよくわかってないんです。
privateで始まっているのでこれはサブルーチンみたいなものだと思ったのですが、

Sub macro1()
worksheet_change(selection)
End Sub

というような感じで使用するということなのですか?
>>279
私は 278 ではないが、

(1) [Alt] + [F11] で VBエディタを表示させて
(2) [Ctrl] + [R] でプロジェクトを表示させて、
(3) 対象とするシート(たとえばSheet1)をダブルクリックする。
(4) コードウィンドウが表示されるから、そこに >>260 をそのまま
  コピペする。
(5) VB エディタは閉じてよい。
(6) Excel の Sheet1 に戻って、てきとーにセルに色をつけておく。
(7) 色をつけたセルの値を変更してみる。
(8) (゚Д゚)ウマー
>>279
あれは、標準モジュールではなくシートモジュールに書きます。
Visual Basic Editorの左上のウィンドウに、Microsoft Excel Objects以下に、
存在するシート名とThisWorkbookというのがありますが、該当するシートを
ダブルクリックした時に右側にウィンドウが開きます。
右側のウィンドウの上部に2つのコンボボックスがありますので、左側で
"Worksheet"、右側でChangeを選択すると、空のプロシージャが挿入されるので、
あとは>>260のようにするだけ・・・と。

こんな説明でよい?
Excelのバージョンによって、使える関数やコードの書き方が
若干異なったりするので、質問する時はバージョンまで書いたほうがよいと思う。
283271:04/05/29 23:36
皆さんありがとうございました。
おかげでうまく日付保存をすることができました。
284デフォルトの名無しさん:04/05/30 01:04
>280さま、>281さま
できました。どうもありがとうございます。
すごいです。こんなことができるなんて!

>282さま
おっしゃる通りですね。今更必要ないかもしれませんが、家のPCには2000が入っており、会社のものは確か2003だったと思います。
285デフォルトの名無しさん:04/05/30 22:28
Excel2002VBAのVBEで,プロパティウインドウを表示して,フォントを変更しようとすると固まってしまいます。
原因は何でしょうか。単にフォントの入れすぎでしょうか。
XPで,メモリーは512MBなんですけど・・・。
286デフォルトの名無しさん:04/06/01 00:31
>>285
CPU使用率表示させながら実行してみ。コードが問題か力不足かがわかる。
漏れが前作らされたの、ファイル開くのにCPU100%で10分以上頑張ってたよ。
ちなみにP4/256MBメモリはたいして消費してなかった。
>>286
ふぅん。
288デフォルトの名無しさん:04/06/01 01:04
VBAでテキストボックスを指定した位置に表示させる事って
できますか?できる場合は、どうすればできるでしょうか?
>>288
top
left
VBAでVLOOKUPとか使えますか?
こういう関数の呼び出し方とかはどこを見れば載ってるんでしょうか
>>290
WorksheetFunction

実際にこれで使えるかどうかは知らんが、まぁテストして見れ
>>290
Excel VBAのヘルプに
 Visual Basicで使用できるワークシート関数一覧
という項目がある。
ここにVLOOKUPものってる。
呼び出しは>>291の通り。
293デフォルトの名無しさん:04/06/03 02:28
エクセルVBAで行に対して名前定義を行ったのですが
(行全体を選択し名前ボックスに名前をつけました)
その名前の行の高さやその行が何行目かなど取得できますでしょうか?
ご教授ください。
よろしくお願いしますm(__)m
294トカ:04/06/03 02:49
Private Sub CommandButton1_Click()
ActiveSheet.Shapes.AddShape(msoShapeRectangle,100#,50,100,90).Select
Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD1
Selection.ShapeRange.ThreeD.Deppth = 50#
End Sub
295デフォルトの名無しさん:04/06/03 17:12
質問です。

AddLineで書いた線をSetステートメントでオブジェクトを参照するように
したいのですが、やり方がわかりません・゜・(ノД`)・゜・。

線を7つぐらい引いてそれをグループ化したいだけなのですが…

教えてください。よろしくお願い致します。
>>293
Sub NameTest()
  Const AreaName As String = "test"
  MsgBox Names(AreaName).RefersToRange.Row & "行目"
  MsgBox "行の高さ:" & Names(AreaName).RefersToRange.Height
End Sub
>>295
Sub GroupLine()
  Const LineMax = 7
  Dim ShapeLines(LineMax - 1)
  
  For i = 1 To LineMax
    ShapeLines(i - 1) = "Line " & i
    ActiveSheet.Shapes.AddLine(10, i * 20, 110, i * 20).Select
    Selection.ShapeRange.Name = ShapeLines(i - 1)
  Next
  ActiveSheet.Shapes.Range(ShapeLines).Select
  Selection.ShapeRange.Group.Name = "Group 1"
End Sub
ところでVBAエキスパート受けた人っています?
ベーシックとかスタンダードじゃ意味ないと思うけど、自己マンのために自腹でとろうかなって。
読んだピンクのテキスト本棚に並べてさらに自己マンw
ttp://www.vbaa.jp/index.htm
そんな資格初めて聞いた・・・
無名過ぎて少なくとも開発現場では評価されないだろうな。
300293:04/06/04 18:53
>>296さん
ご指導ありがとうございます!
上手くできました!!
>>299
て言うか、有名でも VBA○○ じゃ評価は低いだろ。
個人的にはperlとVBAこそが効率化の鍵だと思ってる。
303298:04/06/05 01:43
できたばっかりの資格だし。ただ下手なガイド本より試験対策本の方が漏れには
勉強になりました。MOUSもしかり。漏れのとこは設計書なんかにExcel、Access使うことが
多いので>>302の言う事は一理ある気がしまつ。資格としては「(w」程度でしょうけど。
非定型業務で使い捨てプログラム書くときは重宝する>VBA
「この作業だと2時間くらいですかね〜」といいつつ、マクロで
ちゃちゃっと終わらせてあとはのんびり。30分くらい早めに
終わったことにしてみせたりもいい。
暇そうでいいね。










まあ、所詮そういう仕事しか与えてもらえないわけだ...。
>>305
少なくとも20000行のエクセルシートを手で一行ずつ処理するような雑用にかまけてる暇は無いですね。

そう言う単調だけれど楽な仕事って憧れます。
>>306
ププッ、煽られて必死になるのはわかるけど、Excel で 20000 行と書いてる時点でアフォ丸出し。

Access とか勉強した方がいいぞ。
>暇そうでいいね。

無色に言われたかない罠
>>307
現場を知らない人間の書き込みだな。
引きこもりか、まぁ、せいぜい日曜プログラマだな。
>>308-309
ごめんな、そこまで必死になられるとは思わんかったよ。
せいぜい、VBA 自慢しててください。(ぷぷっ
そういや昔はアクセスなんてなんに使うんだ?とか思ってたなあ。
>>310
・・・あおりしかできないヤツか。
お前、カッターだけは買うなよ。
>>312
キミ、すごいね。

VBA と煽りができるんだから、もう充分だな。(ぷぷっ
>>313
どっかで配ってるか?カッターって。

確か小中学校では支給してもらえたが。


なお、会社にあるそれを私物化するのは犯罪でつ。
名前:カッターなんか今更買うやつなんかいるのか ? 投稿日:04/06/05 17:49

ご苦労様です
>>314-315
普通の家ならあるだろ ?
ヒッキーだとそんなこともわからんかもしれないけどな。(ププッ
>>316
その家にあるってのは誰かが買ってきてるからあるんだよ?
>>317
そうだよ、だから「今更」買う必要はないんだけど、何か ?
>>318
独り暮らしとかしたこと無いんだね。
親に依存している厨房と。
ぷぷっ、誰かさん ≡ 親 としか思えないのか...。

別に「誰か」って言うのが、一年前の自分でもいいんだよ。
なぁ、ぴろゆきタソ
この板もID強制表示にしてくれよ
いいかげん他所いってやってくれ・・・
>>320
1年前の自分は別人ですか・・・。
アブナイ人ですね。
お前は、カッターだけは買うなよ、と。
>>323
どこに「別人」と書いてあるのか示してくれないか ?
まさか、「誰か」≡「自分以外の別人」と思ってるわけ ? (ププッ
誰だ!って俺か!!!

ってのが笑い話になるように、「誰か」には自分を含めないのが一般的だな。
もしかして受け狙いだったのか?
お前の意見 ≠ 一般的
やう゛ぁい。
324 は誰にもかまってもらえないさみしい男だぞ。
2ちゃんねるでタタかれて喜んでるヤツだから〜。

おまえ、カッター買って、バスジャックするようなマネだけはやめとけよ。
>>327
> おまえ、カッター買って

だから、「今更カッターなんか買う必要ない」んだけどな。
わざわざ自分が >>315 で書いてまでいるのに、必死過ぎてわけわからんようになってるんだろうな...。(藁
ドキドキしながら、時々このスレ、リロードしてる328が
目に浮かぶようですね(w

世の中でここだけだからなぁ、
328が相手してもらえるのは。
>>328

ごめんな
>>315は漏れだよ
ついでに>>308も漏れ

つーか、いい加減止めないか!?
>>330
継続は力なり
そんな風に飽きっぽいからVBAプログラマはバカに
されるんだぞ、と
>>329
ごめんな、キミほど暇じゃないから >>328 書いた後寝ちまったよ。
キミは、>>329 書いた後も必死にリロードしてたんだろうな。(藁
>>332
たっぷり寝る時間があってうらやますぃですね。

>>333
激しく同意。
>>328
お前の日本語はわからんな。
「自分」って誰のことを指してるんだ?
336デフォルトの名無しさん:04/06/09 19:02
VBAでプロパティや変数を参照するときに、"!" と "."の二種類で参照が
可能ですが、何か意味が違うのでしょうか?
また、使うならどちらを使ったほうがいいですか?
337オレモナー。:04/06/09 23:00
>>333-335
必死すぎ。
昼間から、我慢できずに 2ch かよ。(藁
338デフォルトの名無しさん:04/06/09 23:04
セルの範囲を指定して読み込むプログラムを作ってるんですけど、
仮にDataRangeという変数に範囲終了セルを代入した場合、
Do While ActiveCell.Range("A1") <> "DataRange"
・・・
Loop

みたいな感じの条件文にしたいんですけどうまくいきません。
(ちなみに上のような文だとセルにDataRangeという文字が入っているところまでと言う意味ですよね・・・)
じゃなくて、変数にB5のように入れてセルB5まで読み込むというふうにするにはどうすればいいでしょうか?よろしくお願いします。
>>337
22:00は夜だと思うぞ。
>338
Addressプロパティを使えばよいのでは。
Do While ActiveCell.Range("A1").Address<>DataRange.Address
ただこれだとDataRangeのひとつ手前までしか処理されないが。
>>339
333 名前:デフォルトの名無しさん[sage] 投稿日:04/06/08 11:12
>>337
小学校行って時計の読み方から勉強しようね。
>>337
我慢できずに、朝から書き込んでる香具師の言う台詞か(ワラ
>>343
warata
>>337
お前が我慢してるからって、みんなが我慢してるわけじゃないんだぞ。
「2ちゃんねる見て〜」→「でも、我慢しなくちゃ」なんて思ったことないぞ(w

お前だけだよ、「我慢」してるヤツは(プ
346338:04/06/10 17:20
>>340
できません。。。
>>338
質問に要領をえないが、セルを順番に調べたいなら
Dim DataRange As Range
Dim rng As Range
Set DataRange = Range(Range("A1"), Range("B2"))
For Each rng In DataRange
MsgBox rng.Value
Next rng
>>342-345
自演ご苦労。
もう少し、時間を空ければいいと思うが、君には難しいみたいだね。(藁

>>338
>>347 が正解だと思うが、ゴリゴリ回したいなら...

Private Sub test()
  Const StartCell As String = "B1"
  Const EndCell As String = "B5"
  Dim Cell As Range
  Worksheets("Sheet1").Activate
  Worksheets("Sheet1").Range(StartCell).Activate
  Do
    MsgBox ActiveCell.Value
    If ActiveCell = ActiveSheet.Range(EndCell) Then Exit Do
    ActiveCell.Offset(1, 0).Activate
  Loop
End Sub

と言う手もある。
>>348
自分のことをバカにする人はひとりしかいないと。
幸せな人だなぁヽ(´ー`)ノ
>>349
ねぇ〜

ちなみに>>344は漏れ
349 名前:デフォルトの名無しさん[sage] 投稿日:04/06/12 00:10
350 名前:デフォルトの名無しさん[sage .] 投稿日:04/06/12 00:20

いつも仲がいいみたいだね。
ニヤニヤ。
352デフォルトの名無しさん:04/06/12 00:43
ねぇ〜
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。

・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる

などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?

【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
>>351
我慢できずに1時間後ですか(w
350 名前:デフォルトの名無しさん[sage .] 投稿日:04/06/12(土) 00:20
351 名前:脳内二重人格ですか ? (藁[sage] 投稿日:04/06/12(土) 00:35

ってか、藻前が自演くさい(w

あと、脳内二重人格ってなんだろう?
脳外二重人格ってのがあるのか
356デフォルトの名無しさん:04/06/12 13:30
「1111ぬるぽ2222」という感じで文字列がA1に入っている場合・・

これをぬるぽを置換で消して、A1に「1111」A2に「2222」という
ふうに分けたいんです。


Sub ぬるぽ()

Cells.Replace What:="ぬるぽ", Replacement:=" "


↑のようにしてタブでセルを分けて、別シートにコピーしようとしたが、無理っぽい。
なにか方法はないでしょうか・・。
>>354-355
> 我慢できずに1時間後ですか(w

ププッ、自分は3時間半も我慢したってか ?

>>356
Option Explicit

Private Sub Test()
Dim A() As String

A = Split(ActiveCell.Value, "ぬるぽ", 2)
ActiveCell.Value = A(0)
ActiveCell.Offset(1, 0).Value = A(1)
End Sub
337 名前:オレモナー。[sage] 投稿日:04/06/09(水) 23:00
348 名前:デフォルトの名無しさん[sage] 投稿日:04/06/11(金) 23:47

う〜ん、我慢できないと言われたのがよっぽどくやしかったのか、
2日我慢してるな〜(ワラ
さぞかし辛かったでしょうね;;

我慢してるのはお前だけだよ(ププ
359デフォルトの名無しさん:04/06/12 14:09
うお、一発でできました。悩んだのに!

357氏。ありがとうございます!!!
>>356
解決したみたいだけど
ワークシート関数でやらずに
VBAでやりたい理由でもあんの?
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
脳内二重人格脳内二重人格脳内二重人格脳内二重人格脳内二重人格
>>360
356氏ではないけど、ワークシート関数だったらどうやるの?
スレ違いスマソだけど、教えて下さい。
363356です。:04/06/12 20:21
>360
いや、関数でもできるならOKなんですが。
たぶん無理?。VBAでやるとカコイイし。

357氏、厨相手の片手間にさらりとコード書いちゃうところがすごいです。
『[脳内二重人格』という名言!を残した357さんはすごいですね!
ぼくもそう思います!!!!
>>363
ごめん、よく読んでなかったよ
「A1に入ってる内容をA1とA2に」っていうのは関数じゃむりでした
「A1に入ってる内容をA2とA3に」ってのなら可能だけど

>>358=>>361=>>364
やっぱり我慢できないみたいね。
ずっと PC の前でリロードしてたんじゃないの ? ププッ

>>359
どういたしまして。

>>365
>>356 さんが、「別シートにコピー」とか書いてるから、別シートに結果を入れるならがんばればワークシート関数でできると思う。
でも、find ワークシート関数は文字列が見つからない時に #VALUE! とかを返してきたりするから、きちんとやろうとすると結構面倒な予感。
テキストデータ(辞書)で5万行ぐらいあるんですが、置換を行う
場合、VBA、WSH(VBS/JSript)、PERLではどの程度速さが違うんで
しょうか。簡単な正規表現でやる場合なのですが、、、

というのも、EMEDITORで作業をしたら、正規表現にしたとたん
とんでもなく遅くなってしまいますた。てか、一気に変換できず
初めは千行ごとにやらないとフリーズ状態です。
WIN XPでつ。
>>367
VBAで正規表現使えたっけ?と言うツッコミは無しで考えた方が良いですか?
「脳内二重人格」と「二重人格」の違いはなんですか?
>>368
そういやないですね。
Wordでの置換の正規表現モドキとしてください。
>>367
どうして自分でやってみないのですか?
おたずねします。
windows2000+EXCEL2000SR-1ですが、webbrowserコントロールをuserformに貼り付けてstopメソッドを使用すると、以下のエラーが出ます。

実行時エラー-2147221500(80040004)
stopメソッドは失敗しました。:IWebBrowser2オブジェクト

セルに貼り付けてstopメソッドを使用した場合は上記エラーは出ません。これは何故なんでしょうか?
うお、Splitなんて関数があったのか。ガビーン。
先週半日かかった仕事が30分で終わってたよ。orz
374デフォルトの名無しさん:04/06/16 14:38
使用エクセルは2000です。
小数点第3位を四捨五入したいのですがワークシートで=ROUND(0.005,2)だと
きちんと0.01と四捨五入されるのですが、VBAで
 Range("A2").Value = Round(0.005, 2)
とやると5で切り捨てられ0、
 Range("A3").Value = Round(0.006, 2)
とやると6が切り上げられ0.01になります。
VBAの場合のきちんとした四捨五入方法教えて下さい。
375デフォルトの名無しさん:04/06/16 16:19
特定のフォルダ内にあるcsvファイルの名前を全て習得し配列に格納したいのですがうまくいきません。
下記のような物を作りました。

Dim test1() String
Dim test2 String

FName = "C:\genka\" + 年 + 月 + "\"
test1() = Dir(FName + "*.csv", vbNormal)
test2 = Dir(FName + "*.csv", vbNormal)

test1()はデバック時にコンパイルエラー(配列には割り当てられません。)と出てしまいます。
test2はgenkaフォルダ内のcsvで名前の順で最初のファイル名が格納されているようです。

どのようにすれば巧く格納できるでしょうか?
ご教授よろしくお願いします。
>375
ヘルプでredimとdirの使い方をしっかり嫁
377375:04/06/16 16:35
いろいろいじってたら出来てしまいました。
お騒がせしました。
378デフォルトの名無しさん:04/06/16 16:58
>>374
Function dRound(Expression As Double, NumDecimalPlaces As Integer) As Double
 Dim s As Double
 s = 10 ^ NumDecimalPlaces
 dRound = Int((Expression + 0.5 / s) * s) / s
End Function

Sub test()
 Range("A2").Value = 0.004: Range("B2").Value = Round(0.004, 2): Range("C2").Value = dRound(0.004, 2)
 Range("A3").Value = 0.005: Range("B3").Value = Round(0.005, 2): Range("C3").Value = dRound(0.005, 2)
 Range("A4").Value = 0.006: Range("B4").Value = Round(0.006, 2): Range("C4").Value = dRound(0.006, 2)
End Sub

379デフォルトの名無しさん:04/06/16 22:15
私の頭ではさっぱり分からないのでお知恵をください。

処理したい内容がシート1上にあり、これを処理してシート2に結果を書いていく
というプログラムです。

処理したい内容が膨大なので(5万5千行ほどある)処理中に
今の処理中の行を表示したいのです。”現在”+A+”行を処理中です。” とか。

ただ、セル上には表示したくないので MSGBOXを使おう
と思ったんですが、これだと表示するたびにOKボタンを入力しないと
制御が次へ行きません。

MSGBOX で入力待ちにせず、ただ、表示だけする方法や
何か他にいい方法はないもんでしょうか?
>>379

>>307 を参考にするといいYO!!
>>379
>>380の意見もまぁ考慮の余地はあるんだけど、、、
これは?(ただし俺はこれを実行したことは無い。動くかどうかのテストはそっちでやってくれ)

様は処理中であることをユーザーに示しておきたいってことだよね。


マクロ処理中にメッセージボックスで処理中の表示をする

sub main
DoEvents  '読込ダイアログ表示
他のサブルーチンの呼び出し
Unload UserForm1
endsub

Private Sub UserForm_Activate()'ユーザーフォーム本体
  MAIN
End Sub


Sub SHOWFORM1()
  '読み込み開始ダイアログを表示
  UserForm1.Show'→ユザーフォームに”処理中”
End Sub

383デフォルトの名無しさん:04/06/16 23:05
皆さんありがとうございました。

ApplicationオブジェクトのStatusBarプロパティ
これを使ってみようと思います。 
384デフォルトの名無しさん:04/06/16 23:13
>>382
わしもそれがいいと思う。
385374:04/06/17 09:42
>>378
CLng使ってきちんと四捨五入できるの作ったのですが
そちらの方が便利ですね

ありがとうございました。
386デフォルトの名無しさん:04/06/17 11:35
Webサーバー上のCSVファイルをVBA(Excel)を使って読み込むにはどうするのが賢明ですか?
ftpは使えないとして・・。
387デフォルトの名無しさん:04/06/17 11:51
シェイプを移動させたときのイベントを受けることはできますか?
Excel2000 です。
例)四角形を移動させたときに、他の四角形と重なったら警告する、等。
388デフォルトの名無しさん:04/06/17 11:55
>>386
ファイル名にURL指定じゃダメ?
389386:04/06/17 13:48
まさか!?と思い、やってみたんですが、やっぱりできません。
390デフォルトの名無しさん:04/06/17 14:16
>>389
Workbooks.Open Filename:="http://kakaku.com/kakakudl/SPEC_winn.csv"
>>390
その csv ってまだあったんだ!?
価格.com のリニューアルの時にトップページにあった
「業者の皆様へ」とかいうリンクがなくなったから、
てっきりダウソできなくなったものだとばかり・・・。

vba とは関係ないがアリガd。
ACCESSのクエリーで、「ある日付に対し○ヶ月後の月末 例:平成16年6月30日の4ヶ月後・・・平成16年10月31日」を指定する関数をつくりたいのですが、是非ご教授下さいませ。
>>392
x月y日に対してzヶ月後の月末とは、(x+1+z)月1日の前日であるからして・・・。
394デフォルトの名無しさん:04/06/19 01:16
http://home.h08.itscom.net/marinos/cherry_1.htm

すげぇ・・・最近の母親は小豆を知らんのか・・・。
VBAってFor文の中で任意のところでスキップさせるには
どうすればいいのですか?
>>395
if
>>395
exit for
>>395
Loopを抜けないのであれば Goto ラベル
>>398
構造化に反しない程度に。
400デフォルトの名無しさん:04/06/19 22:54
小数点以下第5位で四捨五入するようなプログラムを作ったんですが
小数点以下が0の場合表示されません。
たとえば結果が500の場合セルで500.0000ではなくそのまま500と表示されます。
小数点以下の0を表示させる方法はありませんか?
>>400
セルの表示形式を0.00000にしちゃだめなの?
やべっ、0が1つ多かった・・・。
>>400
セルの表示正式の変更を自動マクロで記録すれば、VBAで
どうすればいいか分かる。
404400:04/06/20 01:13
>>401
ご返答どうもありがとうございます。
その方法を試してみたのですが
計算をし直すとき前回の結果は消し去るようにしたので
セルの表示形式の変更もなくなってしまっていたのです。

>>403
ありがとうございました。
自動マクロを使って何をやってるかわかり
ゼロの表示をプログラムからできるようになりました。








Excelに貼り付けた画像ファイルの中身を、マクロで変更させる方法がいまいち分かりません。

画像オブジェクト . 画像プロパティ =”ファイル名”

みたいな形を取るんだと思いますが、そのオブジェクトとプロパティの設定させるのがうまくいきません。

VBオブジェクトでImageを配置して、その中身を変えるというのなら出来るのですが、
裏の画像が透けて見えるような処理が出来ないのと、
クリックしたときに地の色が出るので今やろうとしてる作業に不向きなんで・・・
406デフォルトの名無しさん:04/06/20 18:45
配列に値を設定し、
Dim xvalues(10000) As Double
Dim yvalues(10000) As Double
・・・

それをグラフのX軸、Y軸として表示したいんだけど、
直接設定はできないみたいですね
.Value = yvalues
.XValues = xvalues

どうすればよいのですか
407デフォルトの名無しさん:04/06/21 00:56
誰か〜アクセス2000でお助けを・・・
レポートで重複したデータを非表示にするVBAの構文ってしりませんかー
レポートで重複したデータを非表示にするプロパティいじってもうまく
いかないもんで・・
今日一日かけて色々やったけどさっぱできんかった・・・
お助けを・・・
>>407
標準機能で納得できないのなら、どういう機能がほしいのか詳細に書くべきだな。
なお標準機能の使い方については他をあたってください。
409デフォルトの名無しさん:04/06/21 21:52
すいません お知恵をください。

塗りつぶしてあるセルだけ、他のワークシートにコピーするような式ってありますか?
赤とかオレンジとか。
>>409
とりあえずこんな感じで。

 Dim UsedCell As Range, CheckCell As Range
 
 Set UsedCell = ActiveSheet.UsedRange
 Application.ScreenUpdating = False
 Sheets("Sheet2").Activate
 For Each CheckCell In UsedCell
   If CheckCell.Interior.ColorIndex <> xlNone Then
    CheckCell.Copy
    Range(CheckCell.Address).Select
    ActiveSheet.Paste
   End If
 Next
 Application.CutCopyMode = False
 Application.ScreenUpdating = True
 Set UsedCell = Nothing

てきとーに変えて使ってください。
411407:04/06/21 23:05
>>408
失礼しやした。
非常に複雑な構成でして・・・
一言で言えば、レポートで重複したデータを非表示にするVBAっす。
具体的にいうと
テーブルAとテーブルBという二つのテーブルがあります。
テーブルAは「問題年度」「問題番号」「問題の中の選択肢」
というフィールドがあります。
たとえば「平成14年度、第5問、選択肢A」で上記三フィールドを使用します。
テーブルBには「問題年度」「問題番号」「問題全文」
というフィールドがあります。
「平成14年度、第5問、甲は〜をし、こうした。選択肢A、選択肢B(略)」
で上記3フィールドを使用します。
このテーブルAとテーブルBを「問題年度」「問題番号」で共通するものをリンクしております。
で、レポートとしては
「平成14年度」「第5問」「選択肢A」
「問題全文」
「選択肢A」
「平成14年度」「第5問」「選択肢A」
「選択肢B」
「平成14年度」「第5問」「選択肢A」
「選択肢C」
「平成14年度」「第6問」「選択肢A」
「問題全文」
「選択肢A」
というように表示したいのですが・・
レポート上で「問題全文」のテキストボックスの重複非表示の設定を「はい」にしても
「問題全文」が「選択肢A」〜「選択肢C」の上に毎回表示されてしまうんです。
そこで、これをVBAでなんとかできんものかと・・・
よろしくお願いします。
クエリじゃだめなん?
>>411
とりあえず、すっげーわかり辛い
>>411
そのレポート、さっぱりわからんので
俺としては

「平成14年度」「第5問」
 「問題全文」
    「選択肢A」
    「選択肢B」
    「選択肢C」

「平成14年度」「第6問」
 「問題全文」
    「選択肢A」

と表示してほしい。
415409:04/06/22 06:40
>>410
ありがとうございます!さっそくやってみます
お忙しいところすいませんでした。
416デフォルトの名無しさん:04/06/22 15:49
現在選択されている図形オブジェクトを判断するにはどうしたら良いでしょうか?
>>416
TypeName(Selection) とか Selection.Name とか。
てすと
420416:04/06/23 13:53
>>417
ありがとうございます。
Selection.ShapeRange
で解決しました。
ハマってた原因は複数のオブジェクトが選択される可能性があるのに気づかなかったことでした。


Excel97だと、WhatsThisHelpがFalseの時に「F1」で設定しているヘルプが表示されるのに
Excel2000以降だとTrueじゃないと表示されないのは仕様でしょうか?
422デフォルトの名無しさん:04/06/25 17:51
AccessVBAで困ってます。
コンボボックスにDBから検索してきたものを二列表示させているのですが
コンボボックスを選択すると左側の列が表示されます。
二列目の項目を選択後にコンボボックスに表示させるにはどのようにすればよいのでしょうか?
ご教授よろしくお願いします。
コンボックス名.column(列番号)

※列番号は左端から0,1,2・・・なので2列目は1
424デフォルトの名無しさん:04/06/26 16:38
ExcelVBAで神々の方からの回答お願いです。
スピンボタンで画像が次々とめくれるようにするにはどうしたらいいでしょうか?
例えば写真つきの社員名簿みたいのを想像してください。
ユーザーフォームにテキストボックスを配置してそこには文章を表示するように
出来たのですが、画像をどうしたらいいのか悩んでいます。
loadpicture関数を使って出来そうなのですが俺の技術では無理っぽいっす。
神様方、助けてやってください。
参考になるWebのリンクでも結構ですので貼り付けてください。
たのんます。
>>424
やってみたコードを提示してみてください。
426424:04/06/26 23:24
解決しました。
>>424 = 426
"解決しました"じゃねぇだろ。どのように解決したか位書けよ。
>>427
知るか氏ね。
              ノ∩
           ⊂ >>
            /( 。A。 )っ←>>424=426=428
            U ∨ ∨
         ・@;∴‥
   ∧_∧ ∩  :: :.
  ( ・∀・)/  :: ::
  (つ   /  :: :'
  人⌒l ノ  :: ::
  し(_)

430386:04/06/28 16:00
>>390
サンクス!
質問なのですが、ダブルクォーテーションを文字列で表示させたいんですが、どうすればいいのでしょうか?
>>431
MsgBox Chr$(&H22) & "ダブルクォーテーションを表示させたい !!" & Chr$(&H22)
>>431
""""
>>431
Chr(34)
431さんに便乗ですが質問させてください。

431さんのようにCONCATENATE関数や&で繋ぐ場合そのままだとうまく
いかないのでxlsファイル上で見えるようにするには、例えばほかのワークシート
に置いておいてそこから絶対参照を使って上記の関数などで繋げれば表示される
ようになりますが、それをcsvやtxtなどで保存すると"が"""になってしまっています。

しょうがないので現状では文字列は他の記号で保存をして後でエディタ等で置換
をしているのですがVBAなどで一気に処理できるようにはならないでしょうか?
VBAは初心者です・・
>>433
これがなんで4つか今だ理解できない漏れ。他にいろんなパターン打ってみたけど
いったいどうやって判定してるのだか。
" "" "
なんで3つじゃないんでつか?
MsgBox """でエラー
MsgBox """"で「"」???
>>438
Cで言うとこの原理だ。"\\" -> \
>>438
「仕様」です。
>>440
VBってそう言う言語だな。
思想や指向はなく、ただただ仕様と。
442デフォルトの名無しさん:04/07/08 18:22
すびばせん。

Excelの既存のメニューの動作を乗っ取りたいんですが、
方法があれば、教えてください。

Wordだと、[ツール]→[ユーザー設定]→[コマンド]タブの
「すべてのコマンド」の中にある項目と同じ名前のメソッドを
VBAで作るとオーバーライドできますが、
Excelで同じようなことはできますか?
443デフォルトの名無しさん:04/07/10 01:06
自動でつけられたグラフの名前を変更するにはどうすればいいですか?
計算というシートのL1からL22までのセルを
シートが保護されている記録というシートに行と列を入れ替えて
貼り付けます。
貼り付ける場所はA列の一番したです。

なぜか実行時エラー1004 rangeクラスのpastespecialメソッドが失敗しました。
と出たり出なかったりします(交互に)。
分かる方いません?
明日の課題が。。。(汗)

Sub module1()
Sheets("計算").Select
Range("L1:L22").Select
Selection.Copy
Sheets("記録").Select
'ActiveSheet.Unprotect password:="unlock"
下端 = Range(Cells(3, 4), Cells(3, 4)).End(xlDown).Row + 1
範囲 = "A" & 下端
Range(範囲).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
ActiveSheet.Protect "unlock", DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("計算").Select
ActiveWorkbook.Save '上書き保存
Application.DisplayAlerts = False 'メッセージを出さない
'ActiveWorkbook.Close '閉じる
End Sub
445444:04/07/11 18:07
分かりました。
保護の解除を先頭にもってきたらOKになりました。
お騒がせしました。

Sub module1()

Sheets("記録").Select
ActiveSheet.Unprotect password:="unlock"
Sheets("計算").Select
Range("L1:L22").Select
Selection.Copy
Sheets("記録").Select
下端 = Range(Cells(3, 4), Cells(3, 4)).End(xlDown).Row + 1
範囲 = "A" & 下端
Range(範囲).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
ActiveSheet.Protect "unlock", DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("計算").Select
ActiveWorkbook.Save '上書き保存
Application.DisplayAlerts = False 'メッセージを出さない
'ActiveWorkbook.Close '閉じる


End Sub
保護のオプションによっては、
保護を解除しなくても、VBAで変更かけることができるぞ。
447デフォルトの名無しさん:04/07/15 10:43
シートに含まれているマクロを開放することの出来るマクロを作成することは可能でしょうか?
>>447
できます。
449デフォルトの名無しさん:04/07/16 16:02
ブックに含まれているマクロの一覧を得るにはどうしたら良いでしょうか?
450デフォルトの名無しさん:04/07/16 17:00
>>442
私も知りたいのでしばらく調べてたんですが、よくわかりません。
↓は参考になりませんか?
http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_02_02.html
すいません
ちょっと方法が思いつかないので質問させてください

チェックボックスを一括してコレクションに突っ込みたいわけですが

With chkboxCollection
.Add item:=CheckBox1
.Add item:=CheckBox2
.Add item:=CheckBox3
.Add item:=CheckBox4
.Add item:=CheckBox5
.Add item:=CheckBox6
.Add item:=CheckBox7
End With

では効率が悪すぎます
かといって

For intCount = 1 To intChkcount
chkCollection.Add item:=OLEObjects("CheckBox" & intCount)
Next intCount

とするとチェックボックスではなく"checkbox1"という「文字列」が
突っ込まれてしまいます

良い方法はないでしょうか
Dim obj as Object
With chkboxCollection
For Each obj In Oleobjects
If left(obj.name,8)="CheckBox" Then .Add item:=obj
Next obj
End With
453初心者:04/07/19 03:12
フォームのコンボボックス(例:"Drop down 1")の
コントロールの書式設定の入力範囲
をプロシージャで変更(例:sheet2!$B$2:$B$3)するには
どうすればよいのでしょうか?
>>453
取りあえずマクロ記録。
455デフォルトの名無しさん:04/07/21 01:59
こんばんは。

VBAでワークシートをコントロールするプログラムを開発しているのですが、
ワークシート上に作成したピボットテーブルの行のグループ化のコントロールの所で
詰まってしまいました。

Range("A5").Select
Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _
False, True, False, False)

で、グループ化そのものはできたのですが、その後、グループ化の状況を確認するために
グループの情報を得る方法がどうしてもわかりません。
どなたか、教えてください!
456デフォルトの名無しさん:04/07/21 17:38
プロジェクトの保護について教えてください。
プロジェクトにパスワードを設定する方法だと、世の中には
パスワードを破るソフトがあるようなので、あまり信頼できません。
Excel VBA Lockっていうシェアウェアでプロジェクトの保護を
破られないようにすることが出来るそうですが、これはどれくらい安全
なんでしょうか?(100%破られることは無いと考えて良いのでしょうか?)
もし、そうならば、利用したいのですが。
457デフォルトの名無しさん:04/07/23 12:58
テキストファイルを読み込んで、半角スペース区切りに
データの区切りを行いたいと思います。

  データ1 データ2 "データ3" データ4

データ3となっている部分は、そのまま半角スペースを目印に
区切るとデータ3の途中で分割されてしまいます。
すでにテキストファイル上でも"と"の間という目印はありますが
どのように処理をすればうまくデータ区切りができるでしょうか。
ご教授をいただければ幸いです。
元のテキストデータはどうなってるの?
459デフォルトの名無しさん:04/07/23 14:04
>>458

年月日時分秒 名前 "コメント" 生息地
20040723123030 名無しさん "もう だめぽ" 浜松市

のようになっているものを、

年月日時分秒,名前,"コメント",生息地
20040723123030,名無しさん,"もう だめぽ",浜松市

という区切りにしてExcelのシートに自動的に貼り付ける
仕掛けを作りたいのです。

"コメント"の文字数が変化するので、
何文字目で区切るという芸当は使えません(泣
基本的にスペースで分けて、
スペースの次にダブルクォーテーションがある場合は、
ダブルクォーテーションの次にスペースがあるところまでを一つにすれば?
エクセルのメニューの
「ファイル」「開く」を使うのじゃなくて、
「データ」「外部データの取り込み」「テキストファイルのインポート」の方を使うとよい。

With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Temp\gomi.txt", _
Destination:=Range("A1"))
.Name = "gomi"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(2, 2, 2, 2)
.Refresh BackgroundQuery:=False
End With
463デフォルトの名無しさん:04/07/24 13:09
はじめまして。

VBAで作成したユーザー定義関数をEXCELワークシートのセルから呼出す際に、
通常のワークシート関数のように引数のバルーンヘルプのようなものを出すにはどうしたらよいのでしょうか?

どなたかわかる人がいたら教えてください。

Function hogehoge(fugafuga As Integer) As Integer
  中身
End Function

これで出ない?
質問です

Excelを印刷する時に特定のオブジェクトだけを印刷させない方法ってありますか?

466465:04/07/25 19:03
すいません
普通にObjectのプロパティにありました
PrintObjectをFalseにすればいいだけでした^^;
お騒がせしました^^;;
作ったVBAマクロを他人に配布する方法でもっともスマートな手法を教えてください。
>>467
ホストのファイルごと渡す。
469デフォルトの名無しさん:04/07/29 21:59
>467
何をもって、スマートとするのか?
現在どのようの方法を用いていて、問題点は何か?
>>467
スマートメディアにコピーして配布するのがいちばんスマートだわな。
>>470
35歳以上
CD-Rに焼いて渡す。
小さい方が好ましい。
473467:04/07/30 10:48
説明不足かつ遅レスでスミマセン。

あるExcel VBAマクロを作ったんです。で、それを他の人(十数人)にも使わせたいのです。

で、とりあえず、VBEditorでプロジェクトエクスプローラで、標準モジュールにして、
それをエキスポートし、その(*.bas)ファイルを渡したのです。
で、それを各自のExcelのVBEditorでpersonal.xlsにインポートしてもらいました。
しかし、この方法は手間が多いのでもうちょっとサクッと配布&インストールする方法が無いかなぁ、と思ったのです。
使う人達は素人同然なので...

ちなみに私は普通のVBは使ってますが、Excel VBAは初心者です。
>>473
マクロウイルス的手法でインストーラを作成するのは可能だと思いますが、現状の方法が一番素直だと考えます。
>>473
アドイン化すれば?
そうすれば、Application.AddIns.Add一発でインストールできるよ。
476デフォルトの名無しさん:04/07/31 06:08
エキセル
477467=473:04/07/31 10:39
どうもです。
遅レスで申し訳ない...

>>474
なるほどです。
自分の方法におかしな点が無さそうなのは救いです。

>>475
アドイン化?
調べてないので良く分かりませんが、定番な手法なんでしょうか?
一応ググってみます...
478 :04/07/31 13:22
Sub まとめて()

a = 61

For a = 61 To 1891 Step 60

Rows(a).Rows.Select
Application.Union(Rows(61), Rows(a)).Select

Next a
End Sub


61行から1891まで60行おきに全て選択したいんですが、うまくいきません。
選択されるのは最初の61行目だけです。アドバイスお願いします。
>>478
Sub まとめて()
 Dim RowNum As Long
 Dim SelectRange As Range

 For RowNum = 61 To 1891 Step 60
  If SelectRange Is Nothing Then
   Set SelectRange = Rows(RowNum)
  Else
   Set SelectRange = Union(SelectRange, Rows(RowNum))
  End If
 Next RowNum
 
 SelectRange.Select
 Set SelectRange = Nothing
End Sub
480478:04/07/31 14:22
>>479
本当に助かりました、ありがとうございました。
481デフォルトの名無しさん:04/07/31 19:09
>>473
テンプレートフォルダにマクロの入ったファイルを置いておくだけで、マクロが呼べるようになるよ。
あと、ワークグループテンプレートを使えば、マクロを配布しなくても、
LAN上の共有フォルダにマクロを置いておけば呼べるようになる。
フォルダの設定は、「オプション」の「既定のフォルダ」を見ろ。
エクセルのVBAなんですが

B列に「りんご」、「もも」、「なし」・・・
と入れていって

重複した名前・・・例えば「りんご」を再び入れたら

「もう入ってるよ!」とメッセージが出るようにしたい場合

どうすれば良いんでしょう?
>>482
シートモジュールに

Private Sub Worksheet_Change(ByVal Target As Range)
 With Target
  If WorksheetFunction.CountIf(Range("B1").Resize(.Row - 1), .Value) > 0 Then
   MsgBox "もう入ってるよ!"
  End If
 End With
End Sub

をコピペ。
>>483
早速お返事感謝します
For Nextの方ではまってしまい
WorksheetFunctionを使うなんて想像もしてませんでした

本当に助かりました。有難うございます!
485デフォルトの名無しさん:04/08/06 22:24
本当にvbaの初心者なので申し訳ございません。

keycode=0
というセンテンスですが
どういう意味なのか教えてくれませんか?
>>485
KeyCodeには、キーボードで押したキーの定数が入ってきます。
そのKeyCodeに0を代入すると、その押されたキーは無効になるということです。

例えば、テキストボックスのKeyDownイベントに

If KeyCode = vbKeyA Then KeyCode = 0

と書くと、アルファベットのAは入力出来なくなります。
487485:04/08/07 15:16
>>486
ありがとうございます。
ウインドウ枠の固定とは別に
A1:J8を固定(スクロールで動かない)ように
する方法ってありますでしょうか?
489デフォルトの名無しさん:04/08/09 23:55
エクセルのVBAで「現在行を選択する」ってどうやるのでしょう?
行番号を指定して選択するのは簡単ですが
現在のカーソルのある行を指定する方法がどうしてもわからず困っています。
>>489
Rows(ActiveCell.Row).Select
>>490
助かりました。ありがとうございます。
492デフォルトの名無しさん:04/08/10 23:54
誘導されました

パワーポイントでのVBAです、

やりたいことは、
1.特定のオブジェクトのプロパティをコピーして
2.選択した同種のオブジェクトに適用したい

です。

2の動作の前にプロパティ値の確認&書き換え可能なポップアップを出したいです。

よろしくお願いします。

対象とするオブジェクトのプロパティは吹き出しや曲線矢印のトグルなど、アプリケーション上のプロパティでは設定が出きないものです。
>>492
マルチ
ツール->マクロ->VB editor のヘルプに shape とつっこんで、
Shapeオブジェクトからたどれるところを全部見ろ。
LineプロパティのLineFormatオブジェクトのプロパティのところと、
CalloutプロパティのCalloutFormatオブジェクトのプロパティのところあたりが
役に立つかもしれん。
ダイアログの出し方とかの基本的なとこは、
PowerPointとは独立だから別途勉強しろ。
勘とセンスがあればかなりのことはVB editorのヘルプでなんとかなる。
495デフォルトの名無しさん:04/08/12 01:30
末尾の部分が

\タブ\改行
\EOF

という
ファイルがあって

\改行
\EOF

のように\タブの部分を消したい場合どうすればいいのでしょうか?
2時間悩んでます・・・・

seek()メソッドを使えばよろしいのでしょうか?
お願いします。
tabclear()を使ってください
497495:04/08/12 01:35
すいません説明が不足していました。
エクセルファイルからセルをタブ区切りでCSVファイルに出力させる作業をやっています。



vbTabを検索して削除だな。
499495:04/08/12 01:43
>>496
>>498
ありがとうございます

説明がなっていなくてで本当に申し訳ございません・・・
最後のタブだけを削除したかったのです。
ファイルの末尾から検索(ループ検索)してvbtabを削除することは可能なんでしょうか?
ファイルタイプをCSVファイルでSaveAsしたほうが早そうだな。
501デフォルトの名無しさん:04/08/12 03:06
Excelで作成したグラフをgifに出力して、それをFTPでアップロードしたいのですが、
FTPでのアップロードがうまくいきません。

こんな感じのソースです。

Dim strPNAME As String 'パラメーターファイル名
Dim nFNO As Integer 'ファイル番号

strPNAME = ThisWorkbook.Path & "\ftptest.txt" 'ftpコマンドファイル作成
nFNO = FreeFile '空いてるファイル番号を取る

Open strPNAME For Output As #nFNO

'データ書き込み
Print #nFNO, "open xxx.xxx.xxx" ' ホスト名
Print #nFNO, "userID"
Print #nFNO, "password"
Print #nFNO, "cd public_html"
Print #nFNO, "put " & ThisWorkbook.Path & "\graph.gif"
Print #nFNO, "quit"

Close #nFNO

Shell "ftp -n -s:" & strPNAME

対処方法をご存知の方がいましたらお教えください。
>>495
いっそのことテキストファイル生成してcsv(形式)になるように手動で書き込んでく、とか。
>496
tabclear() なんてあったっけ?
>>503
昔あったよ、透明のコーラ。おいしくなかったな
俵孝太郎……
その精液は「透明なコーラ」と称され、当時のゲイの方々に愛飲された。
507デフォルトの名無しさん:04/08/14 20:53
16進数を10進数に変換する関数ってありますか?
セルに色つけたいんですが、元データが16進数で、RGB関数は10進数なので変換しないと・・・
>>507

16進文字列の長さが0になるまで{

返値に16を掛ける。
16進文字列の前1文字を取り出す。
取り出した16進1文字を0〜15の10進に変換する。
返値に変換した10進を足す。
16進文字列の前1文字を削除する。


>>508
ありがとうございます。
一発変換はできないのですねぇ・・・_| ̄|○
>>509
すまんかった、削除いらいだしてくる。
>>507
Colorプロパティに16進数をつっこむ。

Range("A1").Interior.Color = &HFFF
>>511
どうもです
&Hですか。0xでやってました。出直してきます...λ
>>512
ドンマイ!がんがれ!
アドインの"分析ツール"を組み込めば、そのまま、hex2decという名前の関数があるのだが。
VBAでも使いたいにゃら、"分析ツール - VBA"アドインも組み込んであげて下さい。

515デフォルトの名無しさん:04/08/17 11:35
A列に日付、B列にデータを入力してグラフを作成。
B列には順次データが追加される。

常に最新のデータを含んだグラフに更新するにはどうすれば良いのでしょうか?
これだと、エラーになってしまいます。

Sub graph4()
Sheets("graph(1988〜)").Select
ActiveChart.SetSourceData Source:=Sheets("data").Range("A6", Range("B6").End(xlDown)), PlotBy:= _ xlColumns
End Sub
>>515
以下のような感じでうまくいきました。試してみてください。

Sub graph4()
Sheets("graph(1988〜)").Select
ActiveChart.SetSourceData Source:=Sheets("data").Range("A1:B" & Split(Sheets("data").Range("A1").End(xlDown).Address, "$")(2)),PlotBy:=xlColumns
End Sub
517デフォルトの名無しさん:04/08/19 10:37
四角形や線などの図形オブジェクトの名前を知ったり、変更するにはどうすればよいでしょうか?
VBだと、オブジェクトのプロパティで簡単にできますよね。

現在は、名前を表示するには、以下のようなマクロを実行。

Sub ActiveShapeName()
Debug.Print Selection.ShapeRange.Name
End Sub

名前を変えるには、イミディエイトウィンドウで
selection.shaperange.name = "新しい名前"
のようにしているのですが、かなり面倒です。

良い方法はありませんでしょうか?
VBAのユーザーフォームってBorderStyleは可変にできないのでしょうか?
フォームの最大化(サイズ変更)を自由にさせたいのですが…
>>518

Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub UserForm_Initialize()

    Dim lngWnd As Long

    lngWnd = FindWindow("ThunderDFrame", Me.Caption)
    SetWindowLong lngWnd, GWL_STYLE, GetWindowLong(lngWnd, GWL_STYLE) Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX Or WS_THICKFRAME

End Sub
520518:04/08/24 20:56
>>519
ありがとうございます! 早速試してみます
main(){
 何かの処理その1
 printf("AAAAA");←1番目は最初からある
 printf("BBBBB");←2番目はここに追加
 printf("CCCCC");←3番目はここに追加
 printf("DDDDD");←4番目はここに追加
 何かの処理その2
}

ユーザが任意で二番目以降n番目までのprintf〜を追加し、エクセルのシート
に出力するVBAを作るにはどうすればいいのですか?
522デフォルトの名無しさん:04/08/26 18:51
Excel2000のVBAヘルプでキーワード入力等にマウスを持って行くとカーソルが←→になって入力ができなくなりました。
どうすれば直りますか?
シートを並べ替えるコードを教えて下さいm(__)m(Excel2000)
>>523
どのように並べ替えたいのですか?
日本語(文字数:不定)+数字という感じなんで文字コード順でいいんですけど、
よろしくお願いしますm(__)m。
526523:04/08/27 20:44
525は>>524へのお願いです。
>>525
workという名前のシートを作成してから実行してください。
Sub test()
Dim i As Long
Sheets("work").Activate
Columns("A:A").Select
Selection.ClearContents
Range("A1").Select
For i = 1 To Sheets.Count
Cells(i, 1).Value = Sheets(i).Name
Next
Range("A1:A" & Sheets.Count).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
Range("A1").Select
For i = 1 To Sheets.Count
Sheets("work").Activate
Sheets(Cells(i, 1).Value).Move after:=Sheets(i)
Next
End Sub
528523:04/08/28 17:27
>>527
お礼がおそくなり、すいませんでした。やってみたらばっちりです。感謝m(__)m。
これってsheet名 workにブック内のシート名を書き出して、ソートし、その結果を
元に並べ替えているんですよね?

なにはともあれ、有難うございました。
お知恵をお貸しください。
ユーザーフォームのコマンドボタンから他のexcelシートを呼び出しています。
ユーザーフォームをhideにしないとそのexcelシートが触れないのですが、
hideにしてしまうと呼び出したexcelシートからユーザーフォームへ復帰ができません。
呼び出したシートにはなるべくコードを書きたくないので、
下の様なコードを呼び出し側のシートに書いたのですが、
Activateイベント自体を拾えないようです。
2つ目のexcelを閉じる→一つのexcelがactiveとはならないのでしょうか?

xxフォーム
Cmd_Click
  me.hide
Workbooks.Open Filename:=CurrentPass & "\" & fname
xxフォームのあるexcelシート
Private Sub Worksheet_Activate()
xx.Show

>>529
UserForm1.Show vbModelessではだめですか?
531529:04/09/01 16:42
>530
ありがとうございます。
やってみたがだめでした。
(xxフォームを開くときにvbModelessでいいんですよね?)
フォームがシートの上にあってシートクリックしても前面に出ないのです。
よけて入力するにはフォームが大きすぎて・・・
zorderみたいなものがあればいいのですが。
ヘッダーを作成するプログラムを作っているのですが
変数って使えますか?
533デフォルトの名無しさん:04/09/07 12:58
以前に作成したプロジェクトにロックをかけてしまい、そのパスワードを忘れてしまったので
すが、解除するソフトってありますか?
フリーで結構出回っているということなのですが・・・
その程度ググれないなら使うな
いつまで夏のつもりだ?
>>536
9/11
現在いじくっているワークシートが
先頭から何番目なのかわかる方法ないでしょうか?
>>538
ActiveSheet.Index
540デフォルトの名無しさん:04/09/11 21:06:21
壁に当たっています。

A1のセルの内容が”22,23”のようにカンマを使って区切られている場合はそれを
B2に”22”B3に”23”と分けて出力し、セルの内容が”123”というようにカンマを使われてない
場合はB2に”123”と出力するようにしたい場合はどうすればよいでしょうか?

またさらに”port 22,23”というようなセルがあった場合それをB2とB3に”port 22” ”port 23”
という風に分けて出力する方法はあるのでしょうか?

いずれの場合も区切られている記号はカンマのみで他の記号の場合は分割する必要はありません。


まだ始めたばかりなせいかIfとFindを使うんだなぁくらいしか思い浮かばず
何をどうすればいいか見当もつきません。どなたか宜しくお願いします。
541540:04/09/11 22:12:19
自己レスすいません。

前レスでsplit関数なるものを見つけまして、最初の数字だけのセルだったら
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

で何とかなることがわかりました。
ただ二つめの文字列と数字の混合してあるようなセルの場合に対処することが出来ません。
どうか宜しくお願いします。
542デフォルトの名無しさん:04/09/11 22:23:30
>>540-541
A列の処理したいところを選択してから下のマクロを
実行してみてください。

Sub Test()
 Dim CheckCell As Range
 Dim TextHead As String
 Dim TempText As Variant
 Dim TextSource As String
 Dim i As Long

 For Each CheckCell In Selection
  TextHead = ""
  TextSource = CheckCell.Value
 
  If InStr(1, TextSource, " ") > 0 Then
   TempText = Split(TextSource)
   TextHead = TempText(0) & " "
   TextSource = TempText(1)
  End If

  If InStr(1, TextSource, ",") > 0 Then
   TempText = Split(TextSource, ",")
   For i = 0 To UBound(TempText)
    CheckCell.Offset(0, i + 1).Value = TextHead & TempText(i)
   Next i
  Else
   CheckCell.Offset(0, 1).Value = TextHead & TextSource
  End If
 Next CheckCell
End Sub
543542:04/09/11 22:27:07
B2とB3か・・・間違えた。
それぞれ以下のように書き換えてください。

CheckCell.Offset(0, i + 1).Value = TextHead & TempText(i)

→CheckCell.Offset( i + 1,1).Value = TextHead & TempText(i)

CheckCell.Offset(0, 1).Value = TextHead & TextSource

→CheckCell.Offset(1, 1).Value = TextHead & TextSource
544540:04/09/11 22:55:28
>>542さん。どうもありがとうございます。
まだどんな処理しているか分からないですけどとりあえずコピペして試してみたら
やりたいことが出来ました!

しかも理解しやすい変数を使って頂きありがとうございます。これからどのように動いているか
調べます。本当に助かりました。
どうもありがとうございました。
545デフォルトの名無しさん :04/09/12 02:22:12
お力をお貸し頂けたらと思い書き込みさせていただきます。

別々の人がAccessを使って作った顧客管理ソフト?が2つ(A・B)
あります。

外部から電話がかかってくると常駐してあるAに切り替わります。
画面上には電話番号・顧客登録で登録した氏名・会社名等を表示す
る横長のフォームがあり、そこに上記の情報が表示されます。
そこには「表示」ボタンがありそれを押すと「顧客管理フォーム」
が表示され、電話をかけて来た顧客の情報画面が表示されます。

しかしAの顧客情報画面よりBのソフト方のが登録できる顧客情報
が多いので、Bの方の顧客情報画面を表示させたいのです。
ちなみにBで顧客情報画面を出すには、Bを起動後メインメニュー
から電話番号検索を選びそこに電話番号を入力し検索すると検索結
果が表示されその画面上にある顧客情報ボタンを押すと顧客情報画
面が画面が表示されます。

ここで行いたい処理の流れを整理すると
 電話がかかってくる→Aが起動する→フォームに電話番号などの
 情報が表示される→画面上のボタンを押す→Bが起動→Aで表示
 されている電話番号を元に検索→「顧客情報画面」を表示
ということなのですが、このようなことはVBAでは可能なのでし
ょうか?可能ならばどの様なプログラムになるのでしょうか?
多分説明(情報)不足ではありますが宜しくお願いします。
546デフォルトの名無しさん:04/09/12 07:36:50
>>545
同僚がこんな仕様書書いてきたら怒鳴りつける。
547デフォルトの名無しさん:04/09/12 20:45:50
>>545
できる
要するに、別のファイルを開いて変数を渡すってだけでしょ・・・

塚、そのカキコの様子ではVBAの知識ゼロだべ
イチから説明せにゃならんのか?
548デフォルトの名無しさん:04/09/12 21:00:04
>>545
その顧客管理ソフトを作った人たちに相談したら?
549デフォルトの名無しさん:04/09/12 23:22:13
with range("A1:E10")
   ~~~~~~~~~~~~~~~~~~
 .value = ...
 ActiveChart.SetSourceData Source:=range("A1:E10") ...
                         ~~~~~~~~~~~~~~~~~~
end with

この2ヶ所が重複してしまうのですが、良い指定方法はありますでしょうか
(C++のthisの様な物を探しているのですが…)
550デフォルトの名無しさん:04/09/13 01:06:10
With使わずに、若しくは使う前に一時変数に保持しといたら?
551538:04/09/13 10:28:16
>>539
ありがとうございました。
552デフォルトの名無しさん:04/09/14 00:13:03
>>550
一時変数とか言わんでクレ。なんか構造化すらできない言語のように聞こえる・・・。、
553デフォルトの名無しさん:04/09/14 00:28:34
特に深い意味はなかったんだが…
ローカル変数とでも読んどいてくれ…
554デフォルトの名無しさん:04/09/14 02:24:58
被捕食者の数N、捕食者の数Pとするとき、ロトカ・ボルテラの式

dN/dt=r*N-a*N*P
dP/dt=-s*P+b*N*P (r,s,a,bはいずれも定数)

を、修正オイラー法で近似して、グラフ(横軸:時間t、縦軸:個体数)をシミュレーション、
個体数が2つの波となって周期的に振動する様子を確認せよとの課題が出た。
被捕食者の数は、
N(t)'=N(t-1)+{r*N(t-1)-a*N(t-1)*P(t-1)}  「仮の値」
N(t)=N(t-1)+[ {r*N(t-1)-a*N(t-1)*P(t-1)}+{r*N(t)'-a*N(t)'*P(t)'} ]/2 「修正した値」
捕食者の数は、
P(t)'=P(t-1)+{s*N(t-1)*P(t-1)-b*P(t-1)} 「仮の値」
P(t)=P(t-1)+[ {s*N(t-1)*P(t-1)-b*P(t-1)}+{s*N(t)'*P(t)'-b*P(t)'} ]/2 「修正した値」

だそうだが、y=at+b だの、y=exp(-r*t) だのみたいにもう変数tの式になってるような関数しか今まで
見てないのに、「N(t)=N(t-1)+・・・」とか、関数が関数で表現されてる時点で自分にはもうワケワカメ。
結局NやPを表す式がどうなるのか皆目検討もつきやせん。
「ロトカ・ボルテラ」や「VBA]なんかの単語をを必死で組み合わせてググッてしらみつぶしに見ていったけど
徒労に終わっちゃい、もはやここしか当てのなくなった初心者学生ですが、誰か救いの手を〜
555554:04/09/14 02:30:56
みようみまねの作成途中のやつ。肝心の中身が何にもできてないので「骨組み」とすら呼べんが・・・
これだけすでに「おまえ本当に知識0だろ」と指摘されそうな悪寒。

Dim N As Double, P As Double, a As Double, b As Double, t As double,
Dim N0 As Double, P0 As Double
Dim n As Integer
r = InputBox("被捕食者増加率")
s = InputBox("捕食者死亡率")
a = InputBox("被捕食者死亡率")
b = InputBox("捕食者増加率")
N0 = ??
P0 = ?
t = 0
With Worksheets("Sheet1")
.Cells(5, 5) = "r"
.Cells(5, 6) = r
.Cells(6, 5) = "s"
.Cells(6, 6) = s
.Cells(7, 5) = "a"
.Cells(7, 6) = a
.Cells(8, 5) = "b"
.Cells(8, 6) = b
For t = 1 To 100
n = n + 1
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
.Cells(n, 1) = N
.Cells(n, 2) = P
Next t
End With
End Sub
556デフォルトの名無しさん:04/09/14 18:39:09
ファイルオープンダイアログを
カレントディレクトリで開くにはどうすればいいですか?
557デフォルトの名無しさん:04/09/14 20:38:42
>>554
漸化式を知らないということは中学生位かな?

まず
P(t)'=P(t-1)+{b*N(t-1)*P(t-1)-s*P(t-1)}
という所から直してね。
558デフォルトの名無しさん:04/09/14 20:45:32
>>556
任意の場所で開く場合
ChDir "C:\"
Call Application.GetOpenFilename
559デフォルトの名無しさん:04/09/14 22:56:15
>554
>「ロトカ・ボルテラ」や「VBA]なんかの単語を
その前に、オイラー法を勉強すること。

修正オイラー法の前に、前進のオイラー法ね。
y'=yとかy'=cos(y)とか解いてみて、振動問題でまずいことになってから修正オイラー法を試す。
560デフォルトの名無しさん:04/09/18 11:41:51
入力規則をユーザーが変更できないようにマクロで固定
する方法を教えてください。
半角英数のみしか入力できないセルを作成したいです。
561デフォルトの名無しさん:04/09/18 19:04:41
質問です。
全シートを一括でAutoFit死体のですが、以下のコードでは
Sheets.Selectする前にアクティブだったシートしかAutoFitされません。

ー ソース −
Sheets.Select
Cells.EntireColumn.AutoFit
Cells.EntireRow.AutoFit

教えてえっちぃ人。
562デフォルトの名無しさん:04/09/18 22:39:08
>>560
シートの保護じゃダメなんですか?
563デフォルトの名無しさん:04/09/18 22:40:22
>>561
こうかな。

 Dim WS As Worksheet
  
 For Each WS In Worksheets
  WS.Cells.EntireColumn.AutoFit
  WS.Cells.EntireRow.AutoFit
 Next
564561:04/09/18 23:40:43
>>563
なる程。ワークシートの子要素の数だけループするのですか。
しかもシートをselectする必要無しですね。

( ・∀・)ウマクイッタヨ ステキダヨ カシコイヨ ヌルポ

でもなんで漏れのコードどで思い通りの動きにならなかったのか謎。
565デフォルトの名無しさん:04/09/18 23:52:16
>>564
Cells.EntireColumn.AutoFit

シートオブジェクトを省略すると、アクティブシートが
対象になると思うんだけど。
566デフォルトの名無しさん:04/09/20 11:12:06
Excel VBAの初心者なんですが、
Excel起動時にフォームを表示させているのですが

そのフォームが表示されていると、
他の動作がすべてロックされていますが
これはなぜなんですか?

例えば
セルの選択や、ワークシートの切り替えも出来なくなっています。
ツールバーも使用できなくなってます。
フォームを閉じると普通に戻るのですが・・・
何か設定することでもあるのですか?
567デフォルトの名無しさん:04/09/20 11:21:30
>>566
デフォルトでモーダル表示だから。
モードレスにするなら

UserForm1.Show vbModeless

とする。ただし、97では不可。
568デフォルトの名無しさん:04/09/20 16:41:24
>>92

>VBA歴1日の超初心者ですが、ヤフーへの自動ログインマクロを
>作って居たところ、input name=".save" となっていて、
>"objIE.document.all..save.Click"と、
>記述すると文法違反になってしまいます。

>良い知恵はございませんでしょうか?

もし解決されていたら方法を投稿して頂けませんか?
同じ問題で3日悩んでます(泣
569デフォルトの名無しさん:04/09/20 16:41:28
access2000のVBAで、
テーブルの項目名を取得するにはどうすれば
よいのでしょうか?
結構いろんなサイトを探したのですが載っていません
どなたか教えたください。よろしくお願いします。
570デフォルトの名無しさん:04/09/20 17:03:05
Dim rs As Recordset
Dim fld As Field
Set rs = CurrentDb.OpenRecordset("テーブル1")
For Each fld In rs.Fields
MsgBox fld.Name
Next


571569:04/09/20 17:13:50
>>570
できました!!
本当にありがとうございます。
前々からこの部分だけが解らず、ひっかかっていました。
感謝です。
572540:04/09/20 17:41:11
セルの照合をするプログラムを作っています。

”管理”というワークシートのB列に物品の管理番号、C列に物品番号。
”検索”というワークシートのB列に管理番号を知りたい物品番号。
が入力されてます。

検索シートでマクロを実行させると検索シートのB列の右側に管理番号が表示されるよう
ことが目的です

それで以下のようなコードを記述しました。

Sub 検索()


Dim objRange As Range
Dim l As Long
Dim m As Long
Dim n As Long
Dim i As Long
Dim j As Long

l = 5
m = 3
i = 4
j = 2
n = Cells(Worksheets("管理").Rows.Count, 1).End(xlUp).Row

573572の続きです:04/09/20 17:43:03


next0:
Do Until y = z + 1

If Worksheets("管理").Cells(l, m) = Worksheets("検索").Cells(i, j) Then
Worksheets("検索").Cells(i, j + 1) = Worksheets("管理").Cells(l, m - 1)
GoTo next1

Else
m = m + 1
End If

Loop

next1:
If Cells(i + 1, j) = Empty Then
GoTo finale
Else
i = i + 1
GoTo next0
End If

finale:
MsgBox "検索が終了しました。"

End Sub




574572の続きです:04/09/20 17:45:26
このように記述して実行したところ
If Worksheets("管理").Cells(l, m) = Worksheets("検索").Cells(i, j) Then

の箇所で、実行時エラー 1004
アプリケーション定義またはオブジェクト定義のエラーです。
と言われてしまいました。

ちょっと自分ではどこがいけないのか分からないのでどなたか悪いところを教えて頂けないでしょうか?
宜しくお願いします。
575ゆう:04/09/20 17:48:19
私は老人ホームで働いているゆうといいます。
ショートステイという業務があり非常に多忙です。
そこでエクセルのVBAを使用してなんとか業務を改善したいのですが、
どなたかボランティアでプログラムを作成してくださる方はおりませんか?
私もVBAはほんの少しならわかるのですが、業務が複雑でプログラムが
かけません。
576デフォルトの名無しさん:04/09/20 18:51:17
エクセルVBAの関数で、指定範囲の空欄個数を返すような関数は
ありませんか?
577デフォルトの名無しさん:04/09/20 21:08:24
あるだろってかカウントしろよそれくらい。
578デフォルトの名無しさん:04/09/20 21:19:40
>>572
n = Cells(Worksheets("管理").Rows.Count, 1).End(xlUp).Row
↑このnは使わないの?

>>573
Do Until y = z + 1 ←このyとzは何ですか?
579デフォルトの名無しさん:04/09/20 21:58:14
>>573
m = m + 1
と計算して、列をどんどん右に調べていくことになってシートからはみ出てエラーだな

DGETやVLOOKUP使えばすむのに・・・
580578:04/09/20 22:12:30
>>572-574
以下のように変えればとりあえず動きますね。
※の行が変更点です。

Sub 検索()
 Dim objRange As Range
 Dim l As Long, m As Long, n As Long, i As Long, j As Long

 l = 5: m = 3: i = 4: j = 2
 n = Worksheets("管理").Cells(Worksheets("管理").Rows.Count, 3).End(xlUp).Row '※
next0:
 Do Until l = n + 1 '※
  If Worksheets("管理").Cells(l, m) = Worksheets("検索").Cells(i, j) Then
   Worksheets("検索").Cells(i, j + 1) = Worksheets("管理").Cells(l, m - 1)
   GoTo next1
  Else
   l = l + 1 '※
  End If
 Loop

next1:
 If Cells(i + 1, j) = Empty Then
  GoTo finale
 Else
  i = i + 1
  l = 5 '※(追加)
  GoTo next0
 End If

finale:
 MsgBox "検索が終了しました。"
End Sub
581572:04/09/20 23:16:54
>>578さん、ただの間違いです。はじめlmnをxyzで使っていたら
数学のX軸とY軸と混同してしまってワケ分からなくなったので・・・

>>579さん、ほんとだw 二日酔いで頭が混乱してる・・・


とりあえず>>580に示されたとおりに動かしてみたら動きました。
とんでもないアホに付き合わせてしまってどうもすいませんでした。
582デフォルトの名無しさん:04/09/21 00:14:31
Outlook2003、WindowsXPProSP2を使ってまして、
Outlook2003の自作のマクロを実行させようとしたら、
今までは実行できていたのですが、
いつのまにか(ひょっとしたらSP2を入れてから?)
「このプロジェクトのマクロは無効に設定されています。
マクロを有効にする方法についてはオンライン ヘルプまたは
ホストアプリケーションのドキュメントを参照してください。」
と言われてマクロが実行できなくなってしまいました。

しかし、ヘルプをさんざんみたものの、その方法が見あたらず。。。

なお、セキュリティを「低」にしてみても、同様です。
上記の解決方法をご存じのかた、教えていただければ幸いです。
583デフォルトの名無しさん:04/09/21 05:41:42
はたしてSP2を入れるメリットはあるのかな
私も一部動かなくなりました。
584デフォルトの名無しさん:04/09/21 23:09:29
>>568
ヤフーオークションのログイン画面でしたら、以下のような感じでログインボタンがクリックできると思います。

Set objForms = WebBrowser1.Document.Forms("login_form")
For Each x In objForms
If x.Value = "ログイン" Then
x.Click
End If
Next
585デフォルトの名無しさん:04/09/22 20:48:19
>>568
objIE.document.all(".save").Clickではだめですか。
586 ◆rP70MOObas :04/09/28 22:53:23
>>583
ない!
587デフォルトの名無しさん:04/10/01 09:42:02
AccessのモジュールにあるFunctionをWORDのVBAから呼び出したいのですが、
どのようにすればいいのでしょうか?

WORDからADO使ってAccessのデータベースに接続することはできたけど、
Accessのモジュールを呼び出せると、使い道が増えそうなので…
588デフォルトの名無しさん:04/10/01 13:54:53
CreateObject("Access.Application")でAccessを起ち上げさせるのはどうよ
589587:04/10/01 17:50:42
>>588
多分こんな感じになるはずなんだけど、動きません。うーん…

Sub acModule()
Dim Yougo, Imi As String
Dim acDB As Object

Set acDB = CreateObject("Access.Application")

Yougo = InputBox("用語を入力", , "コンピュータ")
Imi = acDB.Run("用語集.mdb!Yougo", Yougo)
MsgBox (Yougo & " : " & Imi)

End Sub

用語集.mdbのModule1にYougoというFunctionを作っています。
590デフォルトの名無しさん:04/10/01 18:13:07
こんな感じだと思う

Set acDB = CreateObject("Access.Application")
acDB.OpenCurrentDatabase ActiveWorkbook."絶対パス"  ’"C:\My Documents\用語集.mdb"とか
acDB.Visible = True
acDB.UserControl = True
591デフォルトの名無しさん:04/10/01 18:14:29
スマソ間違えた

Set acDB = CreateObject("Access.Application")
acDB.OpenCurrentDatabase "絶対パス"  ’"C:\My Documents\用語集.mdb"とか
acDB.Visible = True
acDB.UserControl = True
592587:04/10/01 20:08:52
>>591
ありがとうございます。うまくいきました。
Accessのファイルを開いていなかったのが、最大の原因だったんですね。

593デフォルトの名無しさん:04/10/03 16:44:36
既出、スレ違いかも知れませんが、
皆様のお知恵を拝借したくカキコしております。

現在悩んでいること
 現在、VB.NETからOutLook2000をCreateObjectして、
 MailItemを操作するプログラムを開発しております。

 外部プログラムからOutLookを操作する際に、
 セキュリティの警告ダイアログが出てしまい、
 運用に耐える代物ではなくなってしまっております。

質問
 ・外部プログラムからOutLookを操作してセキュリティの警告ダイアログを出さない方法は有るか?
 ・外部プログラムからOutLookを操作してセキュリティの警告ダイアログが表示された時、
  自動的に閉じさせる方法は有るか?
 ・実現可能な場合、その方法は。

色々調べたのですが答えが出ませんでした。
なお、メール操作にはOutLookを利用することが要件として含まれているため、
他の方法でメール操作の要件を満たすことが出来ません。

一応、以下に調べた結果を列挙します。
主なWeb上の取り扱い
 結果1、Officeの仕様だ諦めろ
 結果2、ウイルスの中にはセキュリティの警告を出さずに操作するものもあるらしい。
 結果3、恥ずかしくなる位簡単な方法で回避できた(OutLook2002)
    (どうやって回避したとかは載ってませんでした)

※信頼に耐えうるソース
594593:04/10/03 16:48:07
途中で文章が切れてしましました^^;

一番最後の行
 ※信頼に耐えうるソース → ※信頼に耐えうるソースは結果1のみです。

質問した上に誤植までしてしまい、申し訳有りませんでした。
595デフォルトの名無しさん:04/10/03 20:34:52
質問に顔文字使うような奴に下流工程を任せたくない。
596デフォルトの名無しさん:04/10/03 21:43:45
SP2を外せ
597593:04/10/04 04:08:10
>>596

レス有難うございます。
やはりアップデートを外すしか無いのかも知れませんね。
しかし、OutLookの性格上アップデートを外すのはセキュリティ上不安が残るのも事実です。

考えていた対処
 ・オフィスのバージョン2000=>97に落とすか、2000のアップデートを外す。
 ・現実的な対処としてOutLookにアクセスする回数を減らしてユーザーに我慢してもらう。

なんとなく踏ん切りが付きましたので、後者をメインに考えてユーザーと相談してみます。
アドバイス頂きまして、誠に有難うございました。
598デフォルトの名無しさん:04/10/04 12:12:56
OLでメール出そうという企画がまちがい。ユーザーと相談してみなさい。
599質問です:04/10/04 23:10:22
はじめまして。さっそく質問させていただきます。
コンボボックスに
中1
中2
中3
高1
高2
高3
のような項目を作成しました。
このときコンボボックスの値に上記の値の中から
任意のものを初期値としてフォームに入力しておく
ことはできるのでしょうか?
600デフォルトの名無しさん:04/10/04 23:33:44
>>599
できます。
601質問です:04/10/04 23:43:09
>>600
もしお時間があるようならばその方法を教えていただけないでしょうか?
602デフォルトの名無しさん:04/10/04 23:43:39
>>601
無いので嫌です。
603デフォルトの名無しさん:04/10/05 02:36:35
>>600です。>>602様、騙り乙です。

で、まずお使いのアプリを教えれ。
話はそれからだ。

塚、ググればいくらでもHitすると思いますよ。
604質問です:04/10/05 07:47:18
>>599です
>>600様、返信ありがとうございます
現状を全く書いていなかったのが悪かったのですね。。
以後気をつけます。

使っているアプリはエクセル2002です。
Visual Basic Editer を使用してマクロを組んでいます。

「エクセル マクロ コンボボックス 初期化」
などでググっては見たのですが、3時間探しても見つからないので
こちらに質問させていただきました。

開発途中の画像は↓↓↓です。
ttp://www1.ocn.ne.jp/~nasitaka/situmon.JPG
画面右側のコンボボックスに初期値を入力させるというものを最終的には作ります。

是非アドバイスよろしくお願いします
605600:04/10/05 08:51:04
Excelのフォームは詳しくないですが・・

>>599で中2を既定で設定するには

コンボボックス名.ListIndex = 1

でできるようです。

未選択にする場合は-1、リストの1番目は0です。
606質問です:04/10/05 15:49:47
即レスありがとうございました。
またわからないことがありましたら書き込みさせていただきます
607デフォルトの名無しさん:04/10/05 16:45:51
急いでいるのでマルチポストをお許し下さい。

折れ線グラフの雛形を作っておき、それに対して毎回不規則に個数の変わるデータを
元データにする(わかりやすく言えば元データを変える)マクロを作ろうとしています。

試しにマクロの記録で見てみたのですが、

ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R25C1"
↑こんな感じでした。

データの個数が常に一定であれば R1C1:R25C1 をR1C2:R25C2 のような感じにすればよいのですが、
データの個数が一定ではないところが悩みのネタです。
このR1C1:R25C1を開始行と終了行の変数にして、INPUTBOXか、セルに入力して読ませる感じで
やれば良いんじゃないかなと思っているのですが、なかなかうまくいきません。
ちなみに、X軸、Y軸ともに同じ個数で毎回変動します。
(つまり、X軸とY軸のデータの個数は等しくなります)

A:Aが使えればよいのですが、上記のメソッドでは使えないようです。
google等で調べてみたのですが、解決に至りませんでした。

どなたかご指導下されば幸いです。
608デフォルトの名無しさん:04/10/05 17:17:40
>>607
マルチポストした時点で誰も答えるわけ無いのに。
609607:04/10/05 17:39:28
すいませんでした。
610デフォルトの名無しさん:04/10/05 17:40:23
>>609
Sheet1.Range("A1:A25")
611デフォルトの名無しさん:04/10/05 17:40:58
某掲示板の書いたものの、ちょっと急ぎなので2ちゃんなら
早いレスもらえるかと思った次第です。
612607:04/10/05 17:46:20
>>609
いえ、たまたま例をだしただけで、実際はA1:A150だったり、A1:A2000だったり、
毎回変わるのです。
それをInputboxとかセルから変数に読み込んで元データを指定する感じにしたいのです。
inputBOXとかセルから読ませるのはわかります。が、

ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R25C1"(←あくまで例です)
の、R1C1:R25C1の部分を変数にしてマクロを組みたいのです。

質問する分際で説明不足で申し訳ありませんでした。
613デフォルトの名無しさん:04/10/05 20:51:52
おかしいなぁ。マクロの記録でやると

ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:A25"), PlotBy _
:=xlColumns

ってなる・・・。バージョンの違いなんかな。
614 ◆FIcNi4f8js :04/10/05 21:21:10
マルチポストするやつってたいてい解決しても終了報告はマルチポストしないんだよね。
615 ◆FIcNi4f8js :04/10/05 22:23:33
>>607
こんなん?
Sub makechart()
Dim line As Integer

line = 1
While (Cells(line, 1) <> "")
line = line + 1
Wend
If (line = 1) Then Exit Sub

Range("A1:A" & CStr(line - 1)).Select
Charts.Add

あとは適当
616デフォルトの名無しさん:04/10/05 23:46:28
>>615
ナイスマクロウイルス!
617607:04/10/06 00:27:14
>>615がマクロウィルスかどうか私の技量じゃわかりません・・・
なんかそれらしい気もしますが。あした職場のPCで開いてほんとに菌なら処分されます・・・

や、でもなんかそれらしいのでとりあえず持っていって、スタンドアローンで開いてみます。

ドキドキ。
618607:04/10/06 00:30:27
>>615様、貴方が善意の方でしたら申し訳ありません。
私がみるには菌には見えませんのでとりあえずこれをいじって使わせていただきます。
ありがとうございました。
619607:04/10/06 00:33:04
連続で申し訳ありません。
>>617で書いた「それらしい」っていうのは、私の質問で対する回答っぽいという意味であり、
菌らしいという意味ではありません。気を害したら申し訳ないです。では明日試します。
620デフォルトの名無しさん:04/10/06 00:41:19
>>619
いい加減黙れ。
621デフォルトの名無しさん:04/10/06 00:49:30
620ワロタ
622デフォルトの名無しさん:04/10/06 23:20:45
Range("A1:A" & Range("A1").End(xlDown).Row).Select

ではいかんのかいのぅ?
623デフォルトの名無しさん:04/10/07 01:17:43
それだと2行目以降が空欄のとき、最終行までいかなかったっけ?
624デフォルトの名無しさん:04/10/07 01:31:11
Word で下の方に 5行 6桁 など現在のカーソル位置がでますが、
「5行6桁」などと指定してカーソル位置を移動させる方法ありますか?

ちょうど、 EXCELで、 Range("A1").Select とやるようなことを
やりたいわけなんですが。
625デフォルトの名無しさん:04/10/07 12:08:16
VBAでWORDのフィールドコードの種類、オプションのスイッチを
取得する方法ってありますか?

Fields(i).Code.Textで取得してregexで処理するしかないでしょうか?
626デフォルトの名無しさん:04/10/07 22:21:33
シートから1列データを取って、それを重複除去、ソートで整形して
コンボボックスに追加しようと思ったけどソート用関数とか無いの?
627デフォルトの名無しさん:04/10/07 23:02:20
>>626
口の利き方に気をつけろヴォケ!!
>それを重複除去、ソートで整形して
↑この時点でアフォ丸出しだw

>>624-625
Wordはよく判りませぬ・・
628デフォルトの名無しさん:04/10/07 23:26:57
>>627
unix知らないんだろうなぁ・・・。
629 ◆FIcNi4f8js :04/10/08 09:01:09
>>628
ソートしてから重複除去だろ?
630デフォルトの名無しさん:04/10/09 18:48:42
office2000

excel vbaでセルの高さや幅を変更したら発生する
イベントってないですか?

631デフォルトの名無しさん:04/10/10 23:35:32
office2000のExcelでコンボボックスを利用しているのですが、
▼をクリックして、リストを開いた状態で、マウスのホイールを
スクロールさせるとシートのスクロールが発生し、リストのみ画面下部に
移動してしまいます。
できれば、リスト内でスクロールを発生させたいのですが、方法はないでしょうか。
632デフォルトの名無しさん:04/10/10 23:36:27
サービスパックあてれ
633デフォルトの名無しさん:04/10/11 18:11:57
マクロの実行した時、随分時間がかかるんですが
メモリ増やしたら早くなったりしますか?

処理中すごい音してるしちょっと怖いです
634デフォルトの名無しさん:04/10/11 18:50:53
>>633
マクロの内容による
635デフォルトの名無しさん:04/10/11 19:24:53
>>633
>処理中すごい音してるしちょっと怖いです

スワップしてるんなら有効。単に外部ファイル読みまくりなら買って西根。
636デフォルトの名無しさん:04/10/11 19:56:40
>>633
excelのマクロとかだったら処理中の描画をOFFにするだけでかなり速くなる
637デフォルトの名無しさん:04/10/12 23:39:32
>633

ロジック見直せば速くなる
638デフォルトの名無しさん:04/10/12 23:45:39
>>637
当然ながらハンド最適化済みです。
639デフォルトの名無しさん:04/10/13 05:15:39
>>638
ソースくらい出せ
640633:04/10/13 19:07:16
>>635
スワップ、調べましたが私にはどうすればいいのか分かりませんでした。

>>636
最後に

application .screenupdating = false

と書いたんですが何も変わりませんでした。

>>637
638は私ではありません

>>639
次に書きます





641633:04/10/13 19:09:56
Sub ソース()

Dim mysheet As Variant
Dim b As Integer
Dim c As Integer
Dim code As Integer, q As String, u As String, rownum As Integer
Dim myrange1 As Range, myrange2 As Range
Dim move As Integer
Set mysheet = Sheets(Array("×", "×2", "×3", "×4", "×5", "×6", "×7", "×", _
"×9", "×10"))


For Each mysheet In Array("×1", "×2", "×3", "×4", "×5", "×6", "×7", "×8", _
"×9", "×10")
Worksheets(mysheet).Select


For b = 61 To 1891 Step 60
Rows(b).Delete
Next b

For c = 2 To 1831 Step 61
Rows(c).Insert , xlShiftUp
Next c


642633:04/10/13 19:11:28
For rownum = 2 To 1891 Step 61
code = Cells(rownum + 1, 1).Value
If code > 0 Then

Worksheets("○○").Select
Set myrange1 = Range("A:A").Find(what:=code, searchorder:=xlByColumns)
q = myrange1.Address

If Not myrange1 Is Nothing Then

Set myrange2 = Range(q).End(xlToRight)
u = myrange2.Address
Range(q, u).Copy Destination:=Worksheets(mysheet).Rows(rownum)

End If

Worksheets(mysheet).Select

643633:04/10/13 19:13:03
Range(Cells(rownum + 57, 14), Cells(rownum + 59, 14)).FormulaR1C1 = "=AVERAGE(RC[-6]:R[2]C[-6])"
Range(Cells(rownum + 55, 16), Cells(rownum + 59, 16)).FormulaR1C1 = "=AVERAGE(RC[-8]:R[4]C[-8])"
Range(Cells(rownum + 50, 18), Cells(rownum + 59, 18)).FormulaR1C1 = "=AVERAGE(RC[-10]:R[9]C[-10])"
Cells(rownum, 20).FormulaR1C1 = "=AVERAGE(RC[-10]:R[2]C[-10])"
Cells(rownum, 22).FormulaR1C1 = "=AVERAGE(RC[-12]:R[4]C[-12])"
Cells(rownum, 24).FormulaR1C1 = "=AVERAGE(RC[-14]:R[9]C[-14])"

Range(Cells(rownum, 14), Cells(rownum + 56, 14)).FormulaR1C1 = "=R[1]C+2/4*(RC[-6]-R[1]C)"
Range(Cells(rownum, 16), Cells(rownum + 54, 16)).FormulaR1C1 = "=R[1]C+2/6*(RC[-8]-R[1]C)"
Range(Cells(rownum, 18), Cells(rownum + 49, 18)).FormulaR1C1 = "=R[1]C+2/11*(RC[-10]-R[1]C)"

644633:04/10/13 19:14:21
Cells(rownum, 15).FormulaR1C1 = "=RC[-7]/RC[-1]-1"
Cells(rownum, 17).FormulaR1C1 = "=RC[-9]/RC[-1]-1"
Cells(rownum, 19).FormulaR1C1 = "=RC[-11]/RC[-1]-1"
Cells(rownum, 21).FormulaR1C1 = "=RC[-11]/RC[-1]-1"
Cells(rownum, 23).FormulaR1C1 = "=RC[-13]/RC[-1]-1"
Cells(rownum, 25).FormulaR1C1 = "=RC[-15]/RC[-1]-1"

'Cells(rownum, 26).FormulaR1C1 = "=RC[-18]/RC[2]"
'Cells(rownum, 27).FormulaR1C1 = "=RC[-1]/R[1]C[-1]"
'Cells(rownum, 29).FormulaR1C1 = "=RC[-1]/R[1]C[-1]"

End If
Worksheets(mysheet).Select
Next rownum

Range("A:D").HorizontalAlignment = xlCenter
Range("O:O,Q:Q,S:S,U:U,W:W,Y:Y").NumberFormatLocal = "##0.00%"
Range("N:N,P:P,R:R,T:T,V:V,X:X").NumberFormatLocal = "#,###,###,###"
Range("A1").Select

Next mysheet

End Sub
645633:04/10/13 19:19:15
「本文が長すぎます」とエラーがでるので分割しました。
見難くて申し訳ありません。
よろしくお願いします。
646デフォルトの名無しさん:04/10/13 22:20:18
application .screenupdating = false は最後じゃ意味ないぽ
647デフォルトの名無しさん:04/10/14 00:01:09
>>646
最初に入れたら画面が更新されなくなってしまいました。
どうしたらこの不具合を回避できるでしょうか?
648デフォルトの名無しさん:04/10/14 00:15:07
application .screenupdating = true
649デフォルトの名無しさん:04/10/14 23:40:25
>>641-644
(1)シート"×1"だけ処理。(行の削除・追加・Excel関数入力など))

(2) (1)で出来たシートをコピーして、シート"×2"〜 "×10"を作成

(3)シート"×2"〜 "×10"で、シート"×1"と違う部分だけ変更。

というようにしてみてはどうかと思ったんだがいかがなものか。
各シートの内容がどうなってるのかさっぱりわからないのでなんともいえないけど。
650デフォルトの名無しさん:04/10/15 15:23:18
Excel2002のVBAはVB.6ベースだと思いますが、
ExcelXP や Excel2003 もそれは変わっていませんか?
それともVB.netベースになっていますか?
どなたかご存知の方教えてください。
651デフォルトの名無しさん:04/10/15 17:38:18
フォームのダイアログボックスにListBox1を作っておいて、
下のような感じで動かしたいのですが、MainからTestを呼び出しても、
testListBoxがNULLになってしまい、動作しません。
どのようにすれば動くようになるのかお教えください。

Sub Main()

Call Test(Form1.ListBox1)

End Sub

Sub Test(testListBox As Object)

testListBox.Clear

End Sub


Office2000のWORD上でやっています。
652デフォルトの名無しさん:04/10/15 21:30:53
>>650
微妙に関数が増えていたりするが。netではない。

>>651
Sub Main()
  Dim clsList As New Class1
  clsList.obj = UserForm1.ListBox1
  clsList.Test
  UserForm1.Show
End Sub

クラス
Dim WithEvents lst As msforms.ListBox
Property Let obj(ByRef o As Object)
 Set lst = o
End Property

Public Function Test()
 lst.AddItem "ABCDE"
End Function
653650:04/10/15 23:05:39
>>652
ありがとうございます
654デフォルトの名無しさん:04/10/16 15:09:45
初心者なのですみませんですが、おしえて
もらいたいのですけど、
Selection って=現時点のオブジェクトって
ことなのでしょうか?
Selection.xxxの
xxxはそのオブジェクトに依存しているメゾット
とかプロパティというカンジの。
655デフォルトの名無しさん:04/10/16 18:00:22
>>654
カイル君に聞けよ。
656デフォルトの名無しさん:04/10/17 08:40:26
>>654
Selectionは Application オブジェクト と Windows オブジェクト のプロパティ
657デフォルトの名無しさん:04/10/17 19:13:14
VBAをエミュだと思って入ったのは俺だけか?
658デフォルトの名無しさん:04/10/17 22:08:36
現在のマウスの位置にフォームを表示したいのですが、
VBにはScreen.TwipsPerPixelXがありますが、VBAにはありません。
どのようにTwipsとPixelを変換すればよいのでしょうか?
お助けください。
659デフォルトの名無しさん:04/10/17 23:00:12
>>658

[ほかの言葉を使って試してみてください]
660デフォルトの名無しさん:04/10/18 01:15:26
ExcelのVBAで
1.テキストファイルの読み込み
2.一定時間後再度、同じファイルを読み込み
を行いたいのですが、「2.」で読み込む場合
は「1.」で読み込んだ箇所を飛ばして、更新
された箇所だけ読み込みたいのですが、どの
ようにすればできるのでしょうか?
661デフォルトの名無しさん:04/10/18 01:44:14
1.のテキストの最後の文言を控えておいて2.を始める時に検索させれば解決かと
662デフォルトの名無しさん:04/10/18 11:21:26
ExcelVBAで動的にツールバー内部のメニューにマクロを登録したいのですがやり方がわかりません。
通常のボタンですと
Toolbars(i).ToolbarButtons(1).OnAction = "method"
みたいに設定できるので
Toolbars(i).ToolbarButtons(1).Menus(1).OnAction = "method"
みたいにやるのかと思ったのですがスカでした。
これは不可能なのでしょうか・・・
663デフォルトの名無しさん:04/10/18 21:13:27
メニュー自体がひとつのコマンドバーなんだが
664660:04/10/18 22:34:54
>>661

解決しました。
ありがとうございます。
665デフォルトの名無しさん:04/10/19 22:38:38
Excel で印刷される範囲を知るにはどうしたらいいでしょう?
セルは連続してないこともあるので CurrentRegion は使えず、
印刷範囲の指定をしていないときもあるので PrintArea も使えず、
V/HPageBreak もちょっと違います。
具体的には、改ページプレビューで一番外側の青色の線の位置が知りたいんですが。
よろしくお願いします。
666デフォルトの名無しさん:04/10/19 23:42:49
VBAのクラスモジュールは標準モジュールに比べて動作が遅い。

とかありますか?
667デフォルトの名無しさん:04/10/20 00:30:48
>>665
PrintAreaで取れなければ一番端のセルを取ればいいだろ
Dim strAddress As String
strAddress = ActiveSheet.PageSetup.PrintArea
If strAddress = "" Then
 Range("A1").Select
 ActiveCell.SpecialCells(xlLastCell).Select
 strAddress = "$A$1:" & Selection.Address
End If

>>666
インスタンスを1回しか生成せず、Public変数しか使わなければ
ほとんど変わらんし、インスタンスを何度も作れば遅くなるのは
どんな言語でも常識
668デフォルトの名無しさん:04/10/20 10:56:21
初心者のような質問で申し訳ありませんが・・・・

EXCEL2000で以下のような記述をしたところ、EXCEL2000ではうまく動くのですが、
別機種のEXCEL2002ではエラーメッセージが表示されてうまく動きません。
【VBA】
Range(2, "A"), Cells(65536, "L")).Select
Cells(Main_X_start, Main_Y_start).Activate
Selection.ClearContents
Selection.Font.ColorIndex = 1
【2002エラー】
実行時エラー'1004':
「FontクラスのColorIndexプロパティを設定できません。」

対象シートは保護されてますが、Rangeで指定された範囲のロックはされていません。
ColorIndexをColor=RGB(・・・・に修正しても結果は同じでした。
メッセージだけ見ると、Fontオブジェクトをクラスとして認識してしまってる様なのですが・・・・・・

お分かりの方がいらっしゃいましたら、うまく避ける方法を教えてください。
OSは2台ともWIN2000です。
669デフォルトの名無しさん:04/10/20 14:37:47
>>667
例外が起きた後インスタンスがすべて解放されてるのが泣けるのでなんか考えます。
670665:04/10/20 15:00:00
>>667
SpecialCells(xlTypeLastCell)なんてものがあったんですね。
どうもありがとうございました♥
671デフォルトの名無しさん:04/10/20 20:32:25
Sub Macro1()
Worksheets("Sheet1").Range("F9").Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Application.OnTime Now + TimeValue("00:00:10"), "Macro2"
End Sub

Sub Macro2()
Worksheets("Sheet1").Range("F9").Select
With Selection.Interior
.ColorIndex = 46
.Pattern = xlSolid
End With
End Sub

上記のようなマクロで、マクロ実行後Macro2が呼ばれる前に
別Bookを開いていると(ActiveなSheetは「2」)

===========================
実行時エラー'9':

インデックスが有効範囲にありません。
===========================
どのように回避すればよいのでしょうか?
672デフォルトの名無しさん:04/10/20 20:36:05
ThisWorkBook
673デフォルトの名無しさん:04/10/20 20:43:40
>>671
Macro2の対象が元のワークブックならThisWorkbookつけろ
674671:04/10/20 21:20:40
>>672,673
ありがとうございました。

下記のように記述したら、解決したのですが、
現在Activeのbookが非Activeになるのですが、
現在ActiveのbookはActiveのまま、裏でマクロ
を実行されることはできないのでしょうか?

〜省略
Sub Macro2()
ThisWorkbook.Activate
Worksheets("Sheet1").Range("F9").Select
With Selection.Interior

〜省略
675デフォルトの名無しさん:04/10/21 20:51:50
セル自体をオブジェクトにとる方法ってありますか?
rangeじゃないですよね。
676デフォルトの名無しさん:04/10/21 21:51:07
>>675
Rangeじゃない?
677デフォルトの名無しさん:04/10/21 22:11:54
ご存知の方いらっしゃいましたら教えてください。

エクセルシートからCSVファイルを作成するときに
Open file
write #Fileno long(1),long(2),・・・
close file
として数値をダブルコーテーションでくくられていない状態にできるのは
わかったんですけど、
write #Fileno double(1),double(2),・・・
としたときに 0.123 のような値の出力は .123 とされてしまいます。
一の位の0が落ちないようにCSVを作成するにはどうしたらいいのでせうか?
678デフォルトの名無しさん:04/10/21 22:17:45
>>677
VBAは使ったこと無いのだが
Format(0.123, "#0.###")
みたいな事はできないのか?
679デフォルトの名無しさん:04/10/21 22:42:29
何も考えずにSAVEASメソッドでCSV形式保存すればいいような…
680677:04/10/21 23:36:02
>>678-679
ありがとうございました。
明日会社でやってみます。
681デフォルトの名無しさん:04/10/21 23:37:13
キーボードから5つの数字を取り込み、それらのうち最大の数、最小の数を画面表示するプログラムって作れる人いますか?(Visual Basicです)
682デフォルトの名無しさん:04/10/21 23:38:13
>>681
いますよ。
で?VBAでやりたいのか?
683デフォルトの名無しさん:04/10/21 23:45:36
そうです!書いてもらえるとありがたいです

684デフォルトの名無しさん:04/10/21 23:48:25
>>683
宿題は自分でやれ。
685デフォルトの名無しさん:04/10/21 23:51:06
お願いします〜
687デフォルトの名無しさん:04/10/22 00:00:57
SaveAsメソッドでセーブするとき、同名のファイルがあると上書き確認のダイアログ出ますよね。
で、cancelとかいいえをおすとSaveAsメソッドに失敗したという実行エラーになる。。。

処理の最後の部分なので、Resume Nextで進めばいいかとしておきましたが
何かもっとスマートに解決する方法無いですかね?
688デフォルトの名無しさん:04/10/22 00:04:25
>>687
saveasの後にスペースを打ってみろ。
689デフォルトの名無しさん:04/10/22 00:04:54
>>687
Dirで存在調べてあったら消しゃいいだろ
690デフォルトの名無しさん:04/10/22 00:05:44
>>689
だせぇ。
691デフォルトの名無しさん:04/10/22 00:06:42
>>687
On Error Gotoで例外処理。
JavaとかC#とかではそれが当たり前。
692デフォルトの名無しさん:04/10/22 00:06:56
ああ、VBしか使ってないから恥かいた。
693デフォルトの名無しさん:04/10/22 00:11:06
>>689
そっかそっか。勝手に消すかはともかく先回りして調べておきゃいいよな。

例外処理はTryCatchでできればいいけんだけど、まぁVBAだし。
694デフォルトの名無しさん:04/10/22 00:12:45
695デフォルトの名無しさん:04/10/22 00:29:08
>>693
>そっかそっか。勝手に消すかはともかく先回りして調べておきゃいいよな。

キャンセルしたら元ファイルが消えるという愉快な罠。
696デフォルトの名無しさん:04/10/23 01:11:43
activecell の行の "A1:K1" の背景に色を塗るってどうやるんでつか?
行だけは相対参照で、列が絶対参照なんです。
697デフォルトの名無しさん:04/10/23 08:14:21
Excel2000 VBAでExcelの最大化やリサイズを通知してくれるイベントはあるんでしょうか。
698デフォルトの名無しさん:04/10/23 10:04:56
>>697
ない
フックしろ
699696:04/10/23 18:05:05
696をちょっと訂正します。
ActiveCell の行の1列目から10列目までのセルの背景を黒くするマクロ
を書きたいのですが、どう書けばよいのかわかりません。
行が相対参照で列が絶対参照なんです。
700デフォルトの名無しさん:04/10/23 18:24:44
>>699
Cells(ActiveCell.Row, 1).Resize(1, 10).Interior.ColorIndex = 1

でいいのかな?
701デフォルトの名無しさん:04/10/23 18:25:16
>>699
どこでつまづいているんだろう。
アクティブセルの行数を取得できているか、
Rangeで選択するときにCellsを使っているか、
ぐらいじゃないか。
702696:04/10/23 18:45:18
>>700助かりました。ありがとうございます。
703きょうこ。:04/10/24 01:31:33
InStr で Chr(10)の位置を検出したいんであけど、どうすればいいですか?
textCommentが検索対象のテキストとして
InStr(0, textComment, Chr(10), vbTextCompare)
とやっても8文字目にはいってる改行コードの位置が帰ってきません。
vbTextCompareをvbBinaryCompareにしてもだめでした。
textComment の中身をメモ帳に貼り付けるとちゃんと改行されるんですけど・・・
704Instr(1,:04/10/24 05:24:24
検出したいんであけど
705デフォルトの名無しさん:04/10/24 10:37:08
>>703
Instrのスタートは1から
706デフォルトの名無しさん:04/10/26 16:03:09
A列が空白ではない行のBからK列の空白に*という文字を入れたいのですが
どう書けばよいのでしょうか
707デフォルトの名無しさん:04/10/26 18:34:45
セル内のデータの取得と変更、空白かどうかの判定式、ループ処理あたりを調べる
708デフォルトの名無しさん:04/10/26 21:46:47
質問です。

C++で作成したDLLとExcelの間で、文字列の配列を
ユーザ定義型の中の二次元配列でやり取りしようとしてます。
(この時点で間違ってるかな…)
で、
public Type STRUCT
buf(10) As String * 64
end Type
------------------------
Dim struct As STRUCT
としてDLLに渡してやると上手くいくんですが、
渡す直前に配列数を増やそうと思い、
public Type STRUCT
buf() As String * 64
end Type
------------------------
Redim struct.buf(10) As String * 64
としてDLLに渡すと上手くいきません。
理由や代替法など、どなたかご教授願えませんでしょうか?
709デフォルトの名無しさん:04/10/26 22:30:30
>>708
上手くいきません上手くいきません上手くいきません上手くいきません
上手くいきません上手くいきません上手くいきません上手くいきません
上手くいきません上手くいきません上手くいきません上手くいきません

症状くらい書けねえのか!
710デフォルトの名無しさん:04/10/26 22:31:49
>>709
はいはい
711708:04/10/26 23:15:17
>>709
すみません…

症状の方は、DLLの関数を実行して処理が戻ってきた時に落ちます。
「0xXXXXXXXX での命令は、 0xXXXXXXXX のメモリを参照しました。
 メモリが read になることができませんでした。」
と、デバッガを起動させると表示されました。
712デフォルトの名無しさん:04/10/27 13:42:20
CSVファイルとして出力したいのですが
Write #ステートメントで文字列であってもダブルクォートで括らないように出力したいのです
Print #でカンマと改行コード足してやるか、SaveAsでFileFormatをcsvでするしかないんでしょうか?
713デフォルトの名無しさん:04/10/27 18:13:44
仕様です。
714デフォルトの名無しさん:04/10/27 21:41:04
excel VBAで
RDOを使おうとして、rdoEnvironmentを
setすると、ActiveXコンポーネントはオブジェクトを
作成できません。
といわれます。
参照設定でRDO2.0を設定しても同じです。
RDOは使えないのですか?
715デフォルトの名無しさん:04/10/27 23:44:17
>>711
肝心な所を隠すのか。。。
716デフォルトの名無しさん:04/10/30 17:55:10
質問です。
Excelでプロセスメモリエディタのようなものを作ろうと思っているのですが
ExcelVBAでメモリ内の指定のアドレスの値を読むには
どのようにしたらいいのでしょうか?
717デフォルトの名無しさん:04/10/31 11:55:41
判別式で、もし”ヌルポ”というシートが存在する場合にはAの処理へ
”ヌレポ”というシートが存在した場合はBの処理をするようにしたいのですが、
どのような関数を使えばいいのでしょうか?
教えてください。
718717:04/10/31 12:09:23
Dim Sh As Worksheet
On Error GoTo Err1
Set Sh = Sheets("ヌルポ")
Worksheets("ヌルポ").Copy After:=Workbooks("galtu").Worksheets("nullpo")
GoTo Shori
Err1:
On Error GoTo Err2
Set Sh = Sheets("ヌレポ")
Worksheets("ヌレポ").Copy After:=Workbooks("galtu").Worksheets("nullpo")
GoTo Shori2
Err2:
Workbooks("galtu").Close
MsgBox "ヌルポもヌレポも存在しないファイルを選択しました。処理を中止します。"
GoTo ErrorEnd

どうもerr1の処理はしてくれるのですがerr2の処理はしてくれないのです。
どこがいけないのか教えていただけないでしょうか?
719デフォルトの名無しさん:04/10/31 12:19:50
>>718
Shoriラベルがない。

そう言う使い方する場合はなるべくOn Error Resume Nextを使ってくれ。
読みにくい。
720デフォルトの名無しさん:04/10/31 12:25:55
>>718
ttp://www.microsoft.com/japan/msdn/library/ja/vblr7/html/vastmonerror.asp
>エラー ハンドラがアクティブな間 (エラーの発生から、Resume、Exit Sub、Exit Function、
Exit Property の各ステートメントまで) にエラーが発生した場合は、現在のプロシージャの
エラー ハンドラはエラーを処理できません。
721717:04/10/31 14:44:20
>>720
resume を入れていないからどの部分でエラーが起こっても
On Error GoTo Err1
だけ処理をしてしまって
On Error GoTo Err2
が使われなかったということっすよね?

resumeを知りませんでした。どうもありがとうございました。
722デフォルトの名無しさん:04/10/31 21:53:55
質問なんですが
あるフォルダのパスを取得して、そのフォルダ内の
ファイル名をセルに書き出して・・・というマクロを作ってるんですが
対象になるフォルダパスの取得方法に悩んでいます。

ファイルを開くダイアログボックスみたいなのをだして
フォルダパスを取得したいんですが
どうしたらいいのでしょうか?
723デフォルトの名無しさん:04/10/31 22:04:32
VBA フォルダを開く ダイアログボックス
でググるとすぐ引っ掛かるが…
724716:04/11/01 00:59:38
解決しました
スレ汚してスマソ
725デフォルトの名無しさん:04/11/01 02:05:25

質問です。
エクセルで当番表の様なものをつくっています。
土日はその列の背景をオレンジにするようなマクロを作成したいのですが
〜抜粋〜
Do
If ActiveCell.Value = "土" Then
row = ActiveCell.row
col = ActiveCell.Column
Range(Cells(6, col), Cells(26, col)).Select
With Selection.Interior
.ColorIndex = 44
.Pattern = xlSolid
End With
〜省略〜
この様な感じで一応は動きます。
ただシート側の曜日の作成をDATE関数で作成しており、↑の比較ではシリアル値が比較対象となっているせいか
うまく土曜日、日曜日を判定してくれません。エクセル上のシリアル値ではなく表示されている文字で比較する方法はないのでしょうか?
いい解決策がありましたらよろしくお願いします。
726デフォルトの名無しさん:04/11/01 10:08:37
すいませ〜ん、ひとつ教えてください。現在PCを使用しているユーザー名って知ることが出来るでしょうか?
Excel2000です。
727デフォルトの名無しさん:04/11/01 11:45:19
If Week(ActiveCell.Value) = "土" Then
728デフォルトの名無しさん:04/11/01 11:46:16
729726:04/11/01 12:05:05
>>728
サンクス!頑張って勉強します!
730デフォルトの名無しさん:04/11/01 17:57:08
HTMLの勉強してるんだけど、例文とか高橋愛・モーニング娘。とかばっかだからなw
731デフォルトの名無しさん:04/11/01 22:46:04
>>725
If ActiveCell.Text = "土" Then
732デフォルトの名無しさん:04/11/01 23:26:37
モジュール - ユーザーフォーム間でモジュールの変数の値を
渡したいのですけど、publicしか方法はないんですか?

逆にフォームの値もモジュールに渡したいんだけど・・。

よく分かりません。出来ればDimでなんとかできませんか?
733デフォルトの名無しさん:04/11/02 00:10:47
>>732
ソケットでも張れ。
734デフォルトの名無しさん:04/11/02 00:24:31
>>732
非表示にしたラベルのCaption使うとか。
735デフォルトの名無しさん:04/11/02 22:34:59
Publicをつかいたくない理由が分からん…
736デフォルトの名無しさん:04/11/03 00:30:31
>>735
ユーザが不用意に不正な値を変数にセットするのを防ぎたいんだろう。
つまりアクセサメソッドのことを言いたいんだよ。彼は。
737デフォルトの名無しさん:04/11/03 08:22:06
>732
クラス作るのめんどうなんで、もっと簡単な
方法ないかと思っていたのですけど。
ありがとうございます。
738デフォルトの名無しさん:04/11/03 09:11:36
>>736
ユーザーフォームもクラスなのでそういうことをしたければ
Property Let/Getがつかえる。
その場合でもPublic PropertyになるのでPublicは必ず必要。
それでもPublicが嫌ならPrivate Propertyにすればいいが、
そうするとユーザーフォームでしか使えない。
だからPublicを使いたくない理由が理解できなかったのだが。

元発言の意図がProtectedを使いたいのだとばかり…
739デフォルトの名無しさん:04/11/03 20:20:31
spreadsheetを使っているんですが、セルの書式を文字列に変更したい場合はどうすればいいんでしょうか?
通常のシートの場合だと、cell.numberformat = "@" で
うまくいくことを確認しているのですが、spreadsheet では他の方法が
必要なのでしょうか?
わかる方いらっしゃったら、よろしくお願いします
740デフォルトの名無しさん:04/11/03 20:53:28
>>738
継承できないじゃん。と、つっけんどん。
741デフォルトの名無しさん:04/11/03 23:48:32
わるい √の計算方法わがんねぇ
だれかご教授ください
742デフォルトの名無しさん:04/11/03 23:55:12
>>741
x^x=y

を解け
743デフォルトの名無しさん:04/11/04 00:31:00
>>741
「開平算」でYahoo検索してみるのは?
744デフォルトの名無しさん:04/11/04 00:42:10
sqr
745デフォルトの名無しさん:04/11/04 00:42:37
741です
すまねぇSqrってやつがどーしてもでてこなかったorz
自己解決しますた
742さん 743さん 助言ありがとです
746デフォルトの名無しさん:04/11/04 22:03:44
ValidMode As Excel.Validation
Set ValidMode = CreateObject("Excel.Validation") 又は
Set ValidMode = New Excel.Validation

これが通らない理由がわかりません。
なぜでしょうか?
747デフォルトの名無しさん:04/11/05 07:37:52
書き方が正しくないから。
748デフォルトの名無しさん:04/11/07 03:10:31
シート1のA1〜A100まで値が入っていたとして、その中から
文字列で「AA」が入ったセルだけををシート2のB列にコピーしたいのですが
どうしてもうまくいきません、誰か助けてください
749デフォルトの名無しさん:04/11/07 03:20:00
>>748
取りあえずお前が書いたソースup
750デフォルトの名無しさん:04/11/07 03:22:18
VBスレでも聞いてるな
751デフォルトの名無しさん:04/11/07 14:24:58
すみません。おしえてください。

VBEで、プロジェクトエクスプローラーに
microsoft Excel Object
┣---sheet1
┣---sheet2
┣---sheet3
標準モジュール
┗---modules1

ってある場合、modules1の変数は
sheet1に渡すことはできるのでしょうか?
752デフォルトの名無しさん:04/11/07 14:31:26
>>751
プロシージャの外、一番上に、Publicで宣言。

Public Hensu As String

みたいに。
753デフォルトの名無しさん:04/11/07 14:36:47
>751
すみません。できました。
754デフォルトの名無しさん:04/11/07 16:17:22
あー
755デフォルトの名無しさん:04/11/11 21:11:16
作業番号 作業時間
 1 7
 2   4
 3   9
 4   2
のような表があるときに作業番号1〜4に対してそれぞれの持っている時間を
求めるにはどうやればいいのでしょうか?
それを使ってその中から最小の値の番号を調べるようなプログラムを作りたいのですが

756間違えた:04/11/11 21:12:17
作業番号 作業時間
  1     7
  2     4
  3     9
  4     2
のような表があるときに作業番号1〜4に対してそれぞれの持っている時間を
求めるにはどうやればいいのでしょうか?
それを使ってその中から最小の値の番号を調べるようなプログラムを作りたいのですが
757>>756:04/11/11 23:46:22
はっきりいって意味わかんね。
まず他人の立場に立ってみて、この説明を読んで質問内容が理解できるか
考えてみ。
758デフォルトの名無しさん:04/11/11 23:47:56
>>757
マジか?シスアドレベルだぞ?
759デフォルトの名無しさん:04/11/11 23:52:49
単に作業時間を昇順でソートして一番上にくる作業番号を抜き出すだけだろ。
760>>757:04/11/12 04:41:28
すんません。文章下手すぎで
761デフォルトの名無しさん:04/11/12 05:00:28
このデータは Excel の表に入ってるの?それとも外部ファイルを読むの?
762デフォルトの名無しさん:04/11/13 21:42:40
使ってるのはExcel2000で、本でも読んでじっくり勉強したいと思うんですが
お薦めの一冊はどれでしょうか?
763デフォルトの名無しさん:04/11/14 22:23:42
>762
http://pc5.2ch.net/bsoft/
こっちの板で質問した方が良さげかもなぁ

webやhelpで事足りるんで本買わない
764デフォルトの名無しさん:04/11/15 00:01:30
図書館がお勧め
765デフォルトの名無しさん:04/11/15 00:14:26
すみません 教えてください。
ACCESSからEXCELファイルを開く際、
該当のファイルがすでに開かれているか
チェックしたいのですが・・・。
EXCELのVBAではできたのですが、
それをACCESSで行おうとするとうまくいきません・・・。
766デフォルトの名無しさん:04/11/15 22:26:03
教えてください。
Excelでリストボックス内の項目をダブルクリックしたあとに
選択が解除されている状態にしたいのですがうまくいきません。
ListIndexを-1にすればいいというような記述を見つけたので
やってみましたが、選択された状態(項目が反転表示)のままです。
List.Clearして項目を追加しなおすという作業が必要なのでしょうか、、、
767デフォルトの名無しさん:04/11/16 10:37:53
>765
どううまくいかないのか書かないと誰も答えられません。
768デフォルトの名無しさん:04/11/17 00:32:33
教えてください。
Access2000で、以下のようなことをやりたいのですが、うまい方法が思いつきません。

クラスモジュールとして
Class1
 Class2
  :
 Class8
があり、Class1〜8には同じ名前のメソッドが定義されている。
他のクラスモジュールから、Classiのインスタンスを生成したいのですが、
Public sub test(i as integer)
 Dim obj as Object
set obj = new ________
      :
newの後に、固定以外のクラスを指定する方法が分かりません。
クラスのコレクションみたいなのがあって、"Class" & format(i,"0") でうまいこと出来ないものでしょうか。

どうぞ宜しくお願いいたします。
769デフォルトの名無しさん:04/11/17 00:43:12
>>768
ファクトリを作りなさい。
770デフォルトの名無しさん:04/11/17 22:08:17
>>766
とりあえず2通り。

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 ListBox1.Value = ""
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 With ListBox1
  .Selected(.ListIndex) = False
 End With
End Sub
771デフォルトの名無しさん:04/11/18 09:02:22
>>768
>があり、Class1〜8には同じ名前のメソッドが定義されている。

設計を見直した方がいいとおもう
772デフォルトの名無しさん:04/11/18 09:36:20
命名のセンスはともかくとして、同名メソッドがあるなんて珍しくないだろ。
インタフェース使って、あとは>769の言うようにファクトリ的な事すりゃスマートに書けるかと。
773デフォルトの名無しさん:04/11/18 23:48:37
>>771
VB以外の先進的なプログラミング言語の本の多態とかポリモフィズムって言う章を良く読むよろし。
774デフォルトの名無しさん:04/11/19 00:00:11
>>769, >>772
う〜ん、やはりファクトリ作るしか解決法はないんですね。
すっきりしました。
どうもありがとうございました。
775デフォルトの名無しさん:04/11/20 14:02:44
セル内に入力されたものが数字か文字列か判定する方法ってないですか?

田中
01-480-21
2350
ひらい
01-481-21
2540

これで文字列のとこだけ処理かけたいのですが
776デフォルトの名無しさん:04/11/20 14:19:29
自分でやるなら
使われている文字コードの範囲が 30H 〜 39H のみからなる場合
かどうかを調べる。
777デフォルトの名無しさん:04/11/20 14:23:31
>>775
日付の場合は数字扱い?文字列扱い?
778デフォルトの名無しさん:04/11/20 14:53:41
日付ってなんですか?
779デフォルトの名無しさん:04/11/20 15:23:06
>>778
今日なら「2004/11/20」です。
780デフォルトの名無しさん:04/11/20 16:59:39
>01-480-21

ここでの場合、これも数字扱いするの?どっち?
781デフォルトの名無しさん:04/11/20 17:16:26
>>780
それは日付なんですか?
782デフォルトの名無しさん:04/11/20 21:12:59
>>781
文字列だろ。いちいち聞かないと分からないのか?
783デフォルトの名無しさん:04/11/20 22:24:54
>>782
Prologにマジレスカコワルイ。
784780:04/11/20 22:26:00
俺の質問に答えてくれよ。
「01-480-21」は文字列として省いていんだな?例で挙げている「2350」や「2540」を
抽出するだけでいいんだな?
あと「名前」>「なんかのハイフン入り番号」>「四桁のなんかの番号」のペアは必ず一定で、繰り返し続いて
いるのか?
785デフォルトの名無しさん:04/11/20 22:28:11
>>784
誰がそんなこと言った?
786780:04/11/20 22:38:50
もうめんどくさ。組んでやろうと思ったが、質問者が要領を得ないので止めることにする。
ISNUMERIC関数を使え。そんだけ。
787デフォルトの名無しさん:04/11/21 12:54:40
Debug.Print StrReverse("こんちたびなし")
788デフォルトの名無しさん:04/11/21 14:47:25
ユーザーフォームを表示させている状態でワークシートのセルが操作出来ません。
ユーザーフォームを表示させながらセル操作をする方法はあるのでしょうか?
若しくはシート上に作ったボタンが画面をスクロールさせても常に同じ位置にあり続ける方法を
教えて頂けないでしょうか?

初歩的な質問かもしれませんが、検索してもなかなか説明してるページに
たどり着けません。どなたかよろしくお願いします。
789デフォルトの名無しさん:04/11/21 15:01:32
>>788
もーだれす。
790デフォルトの名無しさん:04/11/21 17:53:07
>>788
Modelessは旧バージョンでつかえないのでその場合はあきらめる

定期的にボタンを移動させるだけなら
Public Sub MoveShapeTop(ByVal UpdateIntervalSec As Integer)
 Dim rng As Range
 Set rng = Cells(ActiveWindow.ScrollRow, ActiveWindow.ScrollColumn)
 ActiveSheet.Shapes(1).Top = rng.Top
 ActiveSheet.Shapes(1).Left = rng.Left
 Application.OnTime Now + TimeSerial(0, 0, UpdateIntervalSec), "'MoveShapeTop 1'"
End Sub
こんなことしないでコマンドバー使ったほうがマシ
791788:04/11/21 22:20:37
>>789さん>>790さん
ありがとうございます。
当方2000の環境なので無事modelessが使用出来ました。

792デフォルトの名無しさん:04/11/22 10:02:54
793デフォルトの名無しさん:04/11/22 23:02:27
問、N回コインを投げ、M回「表」が出たときに「表」のでる割合は、
f=M/Nで表されるプログラムを作成してください。
コインの投げる回数はセルA4~A7の中から1つ取り出した後に
Integer型変数に格納して使用し、「表」のでる
割合f=M/Nを対応するセルB4~B7に格納する。
なお、「コイン投げの回数」が格納されているセル位置を毎回修正後に
プログラムを実行すること。
コインを投げる回数Nを大きくすると0.5に収束することを確めてください。
※A4~A7はコイン投げの回数
A4は10,A5は100,A6は1000,A7は10000というコイン投げの回数になってます。
よろしくおねがいします。
794デフォルトの名無しさん:04/11/22 23:33:17
>>793
学校の課題ですか?
795デフォルトの名無しさん:04/11/23 00:41:26
実務じゃそんな処理、万に一つもやらねー
796デフォルトの名無しさん:04/11/23 00:47:20
>>795
うちはそれを生業にしているシンクタンク系S/Wデベロッパですが。
797デフォルトの名無しさん:04/11/23 07:43:09
すみません。
スレ違いかもしれませんが
質問していいでしょうか。

VBAを勉強したいのですが
お勧めの本はありますか。
定番の本など。

急にexelでマクロを書かなくてはならなくなり
田舎に住んでいまして、近くに大きい本屋がなく
店頭で立ち読みしてきめることができません。
アマゾンで購入しようと思っています。
プログラムは、C++やPerlがちょっと書けるくらいです。

よろしくお願いします。
798通りすがり:04/11/23 08:02:09
「かんたんプログラミング Excel2003 VBA」
・基礎編、・コントロール・関数編、・応用編

定番です

799デフォルトの名無しさん:04/11/23 08:18:59
>>798

早々のご回答どうもありがとうございます。
早速アマゾンで注文したいと思います。

あつかましいのですがもうひとつだけ質問していいでしょうか。
現在、使用しているexelのバージョンが2000なのですが
その場合、
1.かんたんプログラミング Exel2000 VBA を買う
2.かんたんプログラミング Exel2003 VBA を買う
3.かんたんプログラミング Exel2003 VBA と Exel2003を買う
のどれがいいでしょうか。
3.が一番良いのでしょうが、2003用の本でも「リスト機能」など
強化されたところをとばせば、2000用の解説書として読めるのでしょうか。
申し訳ありませんが、わかる範囲でご回答いただけたらうれしいです。
800通りすがり:04/11/23 09:07:12
そこまではちょっと分からないです。

1番が無難かと。

あと分からないことは、下のサイトで聞けばよいと思います。

「Moug モーグ」
http://www.moug.net/

Q&A掲示板 Excel VBA




801797,799:04/11/23 09:12:02
>>800

どうもありがとうございます。
そうですね。1が無難ですね。
では、これを注文したいと思います。
質問に答えていただきどうもありがとうございました。
802デフォルトの名無しさん:04/11/23 10:10:28
4.かんたんプログラミング Exel2003 VBA と かんたんプログラミング Exel2000 VBA を買う
803797:04/11/23 10:16:06
>>802

そうですね。2000を読んでみて、もっと知りたくなったら
2003を読んで新しく何ができるかを勉強してみます。
804793:04/11/23 12:42:25
おしえてください。たのみます。
805デフォルトの名無しさん:04/11/23 14:10:50
>>804
宿題は自分でやりましょう。
806デフォルトの名無しさん:04/11/23 16:04:51
SQLのテーブルに
TO_DATE('23-11-2004 11:36:44 AM ','dd-Mon-yyyy HH:MI:SS AM')
な感じで保存されてる日付データがあるんだが、
これの年月日だけ取り出すにはどーすればいいのかね

もしくは全部変数に抽出して、
変数の年月日だけ指定できたらいいんだが‥

むぅ
807デフォルトの名無しさん:04/11/23 18:30:57
substrで切り出してto_dateにでも突っ込んでやれ
808デフォルトの名無しさん:04/11/25 11:36:52
>806
TO_DATE('23-11-2004 11:36:44 AM ','dd-Mon-yyyy HH:MI:SS AM')
という文字列が入ってるって事け?
あとSQLServerをSQLと略すのヤメレ
809デフォルトの名無しさん:04/11/26 01:04:51
久々にVBA書かなきゃならないことになったのですが、
多重ループにラベル付けておいて Exit ラベル名 とかで
脱出するようなことってできなかったんでしたっけ?
何かあったような気がするのですが。。。Goto使うしかないのかな。
810デフォルトの名無しさん:04/11/26 01:09:12
どっちにしろ構造化無視のジャンプだからどうでも良いような気がした。
811809:04/11/26 01:16:40
ああ、まあ、普通のネストしたループの breakですよ。
ある条件でループをそれ以上実行しなくて良くなるので
その関数の終了処理に移りたいという感じ。
Do While ...
 For ...
 Exit Do
 Next
Loop
<<終了処理>>
みたいな感じででとりあえずやってるのですが、
外側のループを Forループにしたいんです。
812デフォルトの名無しさん:04/11/26 01:42:15
gotoがいやなら exit sub かな
813デフォルトの名無しさん:04/11/26 01:58:00
うーん、Exit Sub使うと
その関数内では終了処理できなくなってしまう気が…
814811:04/11/26 02:03:02
On Error で囲んで エラーRaiseでハンドルするのって
この手の処理にはキモイやりかたですよね?
どう思います?
815デフォルトの名無しさん:04/11/27 00:42:33
ごちゃごちゃ言わずにgoto
816デフォルトの名無しさん:04/11/27 00:43:33
どうしても構造化したいならフラグをネスト毎に作れ
817デフォルトの名無しさん:04/11/27 01:16:02
レス沢山サンクスです。
黙ってgotoすることにしました。ありがとうございます。
818デフォルトの名無しさん:04/11/27 11:56:12
質問です.
初めてVBAを使います.
Data0001
Data0002
:
:
と,順番にファイルを読み込みたいです.
For i=1 to n
Workbooks.Open Filename:="Data000???.xls"

???のとこのプログラムをどのようにすればいいでしょうか?
819デフォルトの名無しさん:04/11/27 12:06:29
>>818
"Data" & Format(i, "0000") & ".xls"
820デフォルトの名無しさん:04/11/27 12:12:24
>>819
助かりました.
初めて使うもので,わからないことが多いもので
821デフォルトの名無しさん:04/11/27 12:28:49
 条件付き確率のシミュレーションでは、実験回数をセルより取り出す際
に、VBAのプログラムを修正して行わず、自動的に実験回数10が終了すると実験回数
100、1000、10000と進むようにするにはどうすればいいのでしょうか。
822デフォルトの名無しさん:04/11/27 13:59:37
>>821
 Dim i As Long, 実験回数 As Long
 For i = 1 To 4
  実験回数 = Range("A1").Value ^ i
  MsgBox 実験回数
 Next
823デフォルトの名無しさん:04/11/27 14:26:21
>>822さん
ありがとうございます。
824デフォルトの名無しさん:04/11/27 14:51:50
質問、60%は女性で、その内30%は独身女性であった。
女性客からデタラメに1人選んだ時に、その人が独身である確率を求めた時の
条件付のプログラムを作成した場合、For文、 IF文の使い方、
乱数の使用が分かりません。
実験回数10が終了すると実験回数100、1000、10000と進むようにする。
確率が0.5に収束することを確かめる。
どうすればいいでしょうか?
825デフォルトの名無しさん:04/11/27 14:57:00
10000回なら100x100のセルですむからワークシート上だけで
試行できるぞ。
826824:04/11/27 15:00:45
>>825
エクセルの操作で行うのではなく、全てVBAで行わないといけないんです
827デフォルトの名無しさん:04/11/27 15:06:22
宿題丸投げスレになった?
828デフォルトの名無しさん:04/11/27 15:14:06
そもそも問題が良くわからん。824の書き方だと
30%ってのは女性客に対する独身女性の割合だと
おもうんだが、答えが0.5に収束するってのは変だよね。
実は30%というのは全体に対する独身女性の割合なんじゃ
ないの? ○投げにしても問題文ちゃんとこぴぺ
してくれよ。
829824:04/11/27 16:22:22
>>828
ある旅行ツアーで参加者を調べたところ、60%は女性(40%は男性)で、
その内30%は独身女性であった。女性客からデタラメに1人選んだ時に、
その人が独身である確率を求めよ。
事象A:独身である人
事象B:女性である
条件付き確率の公式によって、0,5(確率が0.5に収束することを確かめる)
830デフォルトの名無しさん:04/11/27 18:34:01
条件付き確率の公式って何?
831デフォルトの名無しさん:04/11/27 18:43:44
>>830
P(A|B)=P(A∩B)/P(B)
832デフォルトの名無しさん:04/11/27 19:02:34
>>829
女性客の内30%が独身で、
女性客からデタラメに1人選んだときに
独身である確率は、当然30%だろ。
833デフォルトの名無しさん:04/11/27 19:10:06
そう読めなくもないな
834デフォルトの名無しさん:04/11/27 19:30:11
シートにボタンとリストボックスを作っておいて
ボタンクリックイベントでリストボックスを引数にしたプロシージャを呼び出す形で
リストボックスのvisibleをトグルしたいのですが上手くいきません
以下失敗作ですがアドバイスお願いします

'リストボックス名  lbcustomer
'ボタン名      cbToggleCustomerList

     'Aタイプ:
Private Sub cbToggleCustomerList_Click()
 AnyListBoxVisibleTggle (ActiveSheet.OLEObjects("lbCustomer"))
End Sub

Sub AnyListBoxVisibleTggle(AnyListBox As Variant) '型は何?
 AnyListBox.Object.Visible = Not AnyListBox.Object.Visible
End Sub


      'Bタイプ:
Private Sub cbToggleCustomerList_Click()
 AnyListBoxVisibleTggle (lbCustomer)
End Sub

Sub AnyListBoxVisibleTggle(AnyListBox As Variant) '型は何?
 AnyListBox.Visible = Not AnyListBox.Visible
End Sub

835デフォルトの名無しさん:04/11/27 20:26:58
>>834
Aタイプ
AnyListBox.Visible

Bタイプ
Activesheet.lbCustomer
836デフォルトの名無しさん:04/11/27 20:37:43
>>835
両方で出来ました

色々試したつもりだったんですが
同じ間違いを繰り返し続けてたのかもしれません・・・

有り難うございました
837デフォルトの名無しさん:04/11/27 22:52:42
Excel2003を使用してますが
VBAでフォーム上のテキストエリアで右クリックしたときにメニューを表示させたいのですがどうすればいいのでしょうか?
838デフォルトの名無しさん:04/11/28 00:08:33

コンボボックスで値を編集できないようにする方法を誰か教えて
listfillrange を a1:a10 とセル範囲を指定するまではいいけど、
その値を編集できて値が変わるのがダメなんですよ。。。
839デフォルトの名無しさん:04/11/28 00:27:53
>>838
自分の金は自分で稼げ。
840デフォルトの名無しさん:04/11/28 00:51:14
>>838
マルチ君さよなら。
841デフォルトの名無しさん:04/11/28 02:15:40
VBAでフォームモジュールとクラスモジュールだけ使ってりゃ
オブジェクト指向と言えますか?
842デフォルトの名無しさん:04/11/28 02:44:10
>>841
C言語でかきゃ構造化というわけでもないのと同様でちゃんチャラお菓子い。
843デフォルトの名無しさん:04/11/28 03:02:19
コントロールの素早いクリック操作がダブルクリックと判定されて困ってるんですが
ダブルクリックイベントって無効に出来ますか?
それとも何か良い解決方法がありますか?
844デフォルトの名無しさん:04/11/28 03:04:54
ハンドルしなきゃ無効なんじゃない?
845デフォルトの名無しさん:04/11/28 04:08:17
無効ではないっぽいです
ダブルクリックするとクリックイベントが2回発生して欲しいんですが
2回目は空のダブルクリックイベントプロシージャが回ってる感じがします
ダブルクリックにもクリックと同じコードを書くって手もありますが
美しくない気がしますしそもそもクリックアップダウン時の挙動が違ってきますし・・・
846デフォルトの名無しさん:04/11/28 14:40:29
Timer1がないんです。 VBのTimerはどのOCXですか?
847デフォルトの名無しさん:04/11/30 10:28:26
0.6以下の乱数を表示させるためにはどうしたらいいでしょうか?
848デフォルトの名無しさん:04/11/30 11:31:35
引き算か掛け算でmax0.6になるように汁
849独学者:04/11/30 20:31:23
WEB上のデータを入力し、その後、その入力データを
加工しようとするプログラムを作ったのですが、
入力データがあまりにも多すぎるためか、入力が完全にされる
前に次の作業を行ってしまい、エラーが生じます。
誰か、解決策を教えてください。
850デフォルトの名無しさん:04/11/30 21:41:40
Application.Wait
851デフォルトの名無しさん:04/11/30 21:56:24
今年度の年齢を出す関数はどう作ったらいいのでしょう…。
DateSerialで、今年度の3月31日を出すところまでやったのですが。。。
852デフォルトの名無しさん:04/11/30 23:32:42
>>851
足し算と引き算が出来ると作れるよ
つまり算数の教科書を読めば良いということだね
853デフォルトの名無しさん:04/11/30 23:48:30
>>852←シリウス歴知らない奴
854デフォルトの名無しさん:04/12/02 09:27:48
>851
VBA初心者なのでこの程度まだ思い浮かびませんが・・・

A列:誕生日
B列:今年度の日(3月31日)
C列:今年度の年齢を表示

Dim n, counter As Integer
n = Sheets("Sheet1").Range("A65535").End(xlUp).Row
counter = 0

For i = 1 To n
counter = counter + 1
Sheets("Sheet1").Cells(counter, 3) = _
Application.RoundDown(((Cells(counter, 2) - Cells(counter, 1) - ((Cells(counter, 2) - Cells(counter, 1)) / (365 * 4))) / 365), 0)

Next i


※B列がCells(counter,2)なので、この部分は今年度の日が一定なら定数にしても良いと思います。
もっとすっきり出来るのであればご教授下さい>中上級者の皆様
855854:04/12/02 11:31:00
すんません・・↑だとおかしいですね・・

Application.RoundDown(((Cells(counter, 2) - Cells(counter, 1) - ((Cells(counter, 2) - Cells(counter, 1)) / (365 * 4))) / 365), 0)

Application.RoundDown((Application.RoundDown((Cells(counter, 2) - Cells(counter, 1)), 0) - Application.RoundDown(((Cells(counter, 2) - Cells(counter, 1)) / (365 * 4)), 0)) / 365, 0)

に変更してください。
でも汚いですね・・・;;
856デフォルトの名無しさん:04/12/02 11:57:30
不良品が2個でるまで品物を検査し、5個以内で2回目が見つかったとき
再点検することにしている。製品が不合格になる確率をp=0.05, p=0.1,
と変えながらそれぞれ製品数500個を検査した場合、
「再点検(再点検回数と再点検率)」する回数とその確率を求める
VBAプログラムをつくりたいと思っています。
*1回目の不合格の製品が見つかると2回目の製品が不合格になるまでに検査
した製品をカウントする。
*1回目の不合格製品と2回目の不合格製品の間の製品カウントが5以上の場合に
再点検回数を1増やす。
乱数、If文、for文を使用しなけ
ればならないことは分かっているんですが・・


857851:04/12/02 23:26:02
>854
レスありがdです。
あれから自分なりに考えて見ました。

Function 年度年齢(生年月日 as Date)
Dim 今月 As Byte
Dim 今年度の日 As Date '←3月31日のこと
Dim 誕生月 As Byte

今月 = Format(Date,"m")
Select case 今月
Case 1,2,3
今年度の日 = DateSerial(Year(Date),3,31)
Case Else
今年度の日 = DateSerial(Year(Date)+1,3,31)
End Select
'↑ここまでこの前考えてた所です

誕生月 = Format(生年月日,"m")
Select Case 誕生月
Case 1,2,3
年度年齢 = DateDiff("yyyy",生年月日,今年度の日)
Case Else
年度年齢 = DateDiff("yyyy",生年月日,今年度の日)-1
End Select
End Function

合ってるかどうか確証がなかったのですが、
デバックすると、なんとなく年齢はあってるようなので、
この形で落ち着きました。
>854さんすいません…また分からないことあったら教えて下さい。
858デフォルトの名無しさん:04/12/03 00:28:08
>>857
それを簡潔にするとこうかな?

Function 年度年齢(生年月日 As Date)
Dim 今月 As Byte, 誕生月 As Byte
Dim 今年度の日 As Date '←3月31日のこと

  今年度の日 = DateSerial(Year(Date) + IIf(Format(Date, "m") <= 3, 0, 1), 3, 31)
  年度年齢 = DateDiff("yyyy", 生年月日, 今年度の日) - IIf(Format(生年月日, "m") <= 3, 0, 1)
End Function
859デフォルトの名無しさん:04/12/03 09:10:28
名前を付けて保存ダイアログの
最初に表示されているフォルダを指定する方法ってありますか?

苦肉の策で Application.Dialogs(xlDialogSaveAs).Show で
ファイル名にフルパスを指定したんですが
何故かパスが削られてファイル名のみ有効になりますし・・・
860デフォルトの名無しさん:04/12/03 11:23:45
VBA Accessでの質問したいのですが
コンボボックスからモジュールへ値を持って取ってきたいのですが出来ません。
本来だったらコンボボックス名.valueで取れると思うのですが私がしたいのは
列数3,列幅0cm;2cm,0cmのところから二つ目の列の値を持ってきたいのです。
従来通りコンボボックス名.valueをすると一列目が取れてしまいます。
どのようにすれば二列目の値を取ることができるでしょうか?
ご教授お願い致します。
861860:04/12/03 11:35:30
事故解決いたしました。
コンボボックス名.Column(列番号)でした。
862デフォルトの名無しさん:04/12/03 11:39:07
コンボボックス名.column(1)でならんかな?
インデックスは0かららしいです、念のため。
863862:04/12/03 13:49:02
しまった!
タッチの差やった…。
864デフォルトの名無しさん:04/12/03 15:04:46
サブフォームにテーブルを表示させているのですが
ここにデータを入力したデータをDBに反映させたり出来るのでしょうか?
色々資料を見るとテキストエリアを並べてRDBの様に見せかけてるやつが
多いのですが・・・。
また「検索」ボタンを押すとコンボで選択した値をキーに検索をかけ
サブフォームに反映させたいのですがどのようにすれば可能でしょうか?
2つやり方を思いついたのですがそれで可能なのかが分かりません。

1.コンボの値をモジュールで受け取りSQLを生成してサブフォームに反映。
    (SQLを作るところまで出来たのですがサブフォームに反映の仕方がわかりません。)
2.コンボの値をクエリで受け取り画面を生成

どうかご教授お願い致します。
865デフォルトの名無しさん:04/12/03 21:25:00
ご教授願います。

TBL内に任意のアドレスを保持します。
そのアドレスを元に、画像を取得し
コントロールに貼り付けたいと思っているのですが、
画像取得時にWindowsの画面と思うのですが、
「インポート中です」と言うメッセージが出てきてしまいます。

このメッセージを消す方法はないでしょうか?

現在、レジストリ等弄りましたが改善されませんでした。

宜しくお願い致します。
866デフォルトの名無しさん:04/12/03 22:54:21
>>865
その質問に答える前に一つ聞くがお前巨乳は好きか?
867デフォルトの名無しさん:04/12/04 01:27:49
ExcelのVBAで、applicationのメソッドにEvaluateというのがありますが
これはシェルやPerlのevalのように
文字列でサブルーチン名を渡すとそのサブルーチンを実行してくれるような
機能はないのでしょうか?
組み込み関数だと上手くいくようなのですが、自分で定義したものだとどうも駄目です。
関数のディスパッチなどに使えたら便利だなぁと思うのですが…
868デフォルトの名無しさん:04/12/04 15:17:31
VBAでCollectionに入れた要素って
個々の要素を決してRemoveすることがなければ
Addした順序で並んでいると信じちゃって良いんでしょうか?
ちょっと試したところ、そんな感じになっているのですが。。
869865:04/12/04 16:53:08
>866
好きですが
870デフォルトの名無しさん:04/12/04 17:49:16
>>859
ChDir "C:\Temp"
Application.GetSaveAsFilename
871デフォルトの名無しさん:04/12/04 18:03:03
>>867
関数のディスパッチってこういうこと?

Sub Main()
  Dim i As Long
  For i = 1 To 3
   Application.OnTime Now(), "Test" & i
  Next
End Sub

Sub Test1()
 MsgBox "Test1"
End Sub

Sub Test2()
 MsgBox "Test2"
End Sub

Sub Test3()
 MsgBox "Test3"
End Sub
872デフォルトの名無しさん:04/12/04 18:36:04
Perlのpush、pop、shift、unshift、split、join
あたりの関数誰か作ってくれないかね?
873867:04/12/04 21:28:57
>>871
おお、まさにそれです!
OnTimeというのには面食らいましたが素晴らしい。
お借りします。サンクスです。
874デフォルトの名無しさん:04/12/04 21:35:36
Application.Runのほうがいい希ガス
875871:04/12/04 22:07:28
>>874
そうですね。
Application.Run は出てこなかった・・・。
876お助けを:04/12/04 23:33:40
CSVファイルをエクセルに取り込もうと思ったら
CSVファイルの中身が

・先頭にCRが二つ
・改行がLF
になっていました
毎回、ワードパッドで変換するのも大変なので
エクセルのVBAで改行コードを書き換えようと思いました

CSVファイルをエクセルの#1に取り込んだ後
・先頭のCRを削除
・LFをCRLFに変換
という作業をしたいと思います
877つづき:04/12/04 23:34:23
とりあえず
↓こんな感じで構想したんですが
Open FILENAME For Input As #1

<開いた#1を全部 C に突っ込む作業>

C.Replacement What:=Chr(13), Replacement:=""
'LF CRLFへの変換
C.Replace What:=Chr(10), Replacement:=Chr(13) & Chr(10)

<#1に書き戻す作業>
'以下Sheet1に書き込む

という流れを考えたんですが
<開いた#1を全部 C に突っ込む作業>
<#1に書き戻す作業>
この作業がうまくいきません
はたしてChr(13)やChr(10)で変換できるのかも不明・・・

うまくエクセル内部で改行コードを変換したいのですが
達人のみなさん、良い方法ないでしょうか?
878デフォルトの名無しさん:04/12/04 23:56:44
perlの方が楽。
879デフォルトの名無しさん:04/12/05 00:27:29
>>876-877
置換する前の状態でExcelに取り込むとどういう状態に
なるんですか?
880デフォルトの名無しさん:04/12/05 00:57:48
>>879
CSVをダブルクリックで普通に開くと
先頭にCRがくっ付いてるので最初の一行目が「・・」か文字化け、あるいは「・・データ」または
一行目も正常に読まれる

という状況です

2行目以降は、LFはCRLFに置き換えて読み込まれて各セルに格納されるようです

Open FILENAME For Input As #1
をつかっているのは
CSVそのままだと65536行以上になる場合があるので
内部で開いて同じグループは横に伸びるように振り分けて取り込んでいます

ワードパッドで毎度変換するのも大変なので
なんとかできないものかと思考錯誤しております
881デフォルトの名無しさん:04/12/05 02:18:40
>>880
参考になれば。
Sub Macro1()
Dim FS, CSVFile
Dim FileName As String, CSVStr As String

  FileName = ActiveWorkbook.Path & "\TEST.CSV"
  Set FS = CreateObject("Scripting.FileSystemObject")
  Set CSVFile = FS.OpenTextFile(FileName)
  Do Until CSVFile.AtEndOfStream
   CSVStr = CSVStr & Replace(CSVFile.ReadLine, vbCr, "") & vbCrLf
  Loop
  CSVFile.Close
  
  Set CSVFile = FS.OpenTextFile(FileName, 2)
  CSVFile.Write CSVStr
  CSVFile.Close
  MsgBox "変換完了"
End Sub
882デフォルトの名無しさん:04/12/05 03:06:34
>881
こんな夜更けに有難うございます!!!

とりあえず、今あるマクロに上記のコードを組み込んだら
秀丸で意図的に作ったLF改行のCSVで
うまく動きました

明日・・・というか今日ですが
881さんのを参考に職場の方にある問題のCSVファイルで実行
してみます

これから寝ます
かみさまありがとうございました
883デフォルトの名無しさん:04/12/05 22:40:41
エクセルのコマンドバーなんですが
Set Ctrl = Application.CommandBars("Cell").Controls.Add()
With Ctrl
.OnAction = "Sheet1.Hoge"
.Parameter = "12345"
End With
とすると、Sheet1.Hoge が引数 "12345" で呼び出されるようなことが
ヘルプにあるのですが、どうも引数が渡っていないようです。
Public Sub Hoge(Arg as String)
と受け側を定義して実行すると「引数は省略できません!」と怒られてしまいます。
多分、どこか間違っているのでしょうが、コマンドバーから呼び出す関数に引数を渡すのは
どうやったら良いのでしょうか?お助け下さい。
884デフォルトの名無しさん:04/12/05 22:59:42
ある集合(標本数は変数)を辞書式配列にして表示するマクロを考えていますが
組み方が思いつきません
何重かのループになりそうなんですが…
885デフォルトの名無しさん:04/12/05 23:13:46
>>884
ハッシュとか連想配列を使いたいということですかね?
886デフォルトの名無しさん:04/12/05 23:25:52
>ハッシュとか連想配列

違うもんでしたっけ?
887デフォルトの名無しさん:04/12/05 23:35:40
>>883
確実に間違った解決法だと思うけど、

With Ctrl
.OnAction = "Sheet1.Hoge"
.Parameter = "12345"
End With
       ↓
With Ctrl
 .OnAction = "'Sheet1.Hoge 12345'"
End With

とすると引数(12345)は渡されてるようです。
888デフォルトの名無しさん:04/12/05 23:42:35
>>887
あ、シングルコーテーションするのですね!!
やってみます!!ありがとうございます
889デフォルトの名無しさん:04/12/05 23:44:51
>>888
ツラレクマー
890デフォルトの名無しさん:04/12/05 23:49:59
>>887
ばっちしでした。ありがとうございます。
891デフォルトの名無しさん:04/12/06 00:03:49
>>884
Microsoft Scripting Runtimeに参照設定(or CreateObject)して
Scripting.Dictionary使うなり
Collectionでそれっぽく使うなり...
892880:04/12/06 07:40:00
880です
スレの皆さんにはあまり興味ないかもしれませんが事後報告です

問題のCSVファイルを881氏のを参考に試行錯誤してみたんですが
予想していた動きにならずおかしいなぁ・・・と思い、ファイルダンプしたら

FF FE 22 00 30 00 31 00 ・・・0A・・・と、成っており、どうやら

ファイルエンコードタイプ:UTF-18,リトルエンディアン,BOM付
改行コード:LF

というファイル形式になっていました

ファイルタイプの変更はAODというのを使うとうまくいきそうだという事で
あんまり良く分からないんですがファイル変換→保存できるコードを作ってみました
893880:04/12/06 07:41:25
Sub Macro()
Dim xlAPP As Application
Dim Stm1 As Object
Dim Stm2 As Object
Dim SourceFilePath As String
Const TITLE = "テキストファイル読み込み"
Const FILTER = "全てのファイル (*.*),*.*"
Const adLF = 10
Const adCRLF = -1
Const adReadLine = -2
Set xlAPP = Application

xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
SourceFilePath = xlAPP.GetOpenFilename(FileFilter:=FILTER, TITLE:=TITLE)
If StrConv(SourceFilePath, vbUpperCase) = "FALSE" Then Exit Sub

'UTF-16 の取込
Set Stm1 = CreateObject("ADODB.Stream")
Stm1.Open
Stm1.Charset = "UTF-16"
Stm1.LineSeparator = adLF
Stm1.LoadFromFile SourceFilePath
894880:04/12/06 07:43:29
'shift-jis の書込
Set Stm2 = CreateObject("ADODB.Stream")
Stm2.Open
Stm2.Charset = "shift-jis"
Stm2.LineSeparator = adCRLF
Stm1.CopyTo Stm2
Stm2.SaveToFile SourceFilePath, 2

Stm2.Close
Stm1.Close
Set Stm2 = Nothing
Set Stm1 = Nothing
End Sub

達人なら、直接セルに割り振ったり出来るんでしょうが
当分の間、自分はまず変換保存してから再度読み込んで処理しようかと
895デフォルトの名無しさん:04/12/06 16:09:17
表形式のサブフォームがあるのですがその表の内容をAccessDBに更新したいのですが
どのような処理を行えば実現するでしょうか?
表形式のサブフォームをの内容をモジュールの方へ持ってこられればなんとでも出来そう
なのですが・・・。
どなたかお教え願えませんでしょうか?
896デフォルトの名無しさん:04/12/06 17:14:25
サブフォームで一番左の列の▲マークがある所のレコードのデータは
『サブフォーム.列名』で習得できました。
しかしこの方法だと▲マークがあるところだけで全部の行を更新するには
手動でレコードを次にしてあげなくてはなりません。
DBのレコードはMoveNextで次の行に行ってくれると思うのですがモジュール上
にてサブフォームのレコードを次に移して上げるにはどのようにすればよいのでしょうか?
897デフォルトの名無しさん:04/12/06 20:01:54
VBAってどんなことできるんでしょうか?
VBみたいにウィンドウ表示させたり、API関数使っていろいろできたりするんでしょうか?
898デフォルトの名無しさん:04/12/07 00:05:20
>>897
出来ます。
899865:04/12/07 10:05:30
>>865は無理なんでしょうか
900デフォルトの名無しさん:04/12/07 10:44:27
900
901デフォルトの名無しさん:04/12/07 22:21:02
どなたかご教授お願いします。
最近VBAに目覚めたものです。


Sub データ行のあるところまで計算式挿入()
Range("c1", Range("c1").End(xlDown)).Select '3列目のデータ最終行のセルを選択
Selection.Insert Shift:=xlToRight '一列挿入
Range("c2").Formula = "=a2+b2" 'c2に計算式を入れる
Range("c2").Copy 'それをコピー
Range("c3", Range("c3").End(xlDown)).PasteSpecial 'Bのセル(Dのセルでもよい)のデータの最終行まで計算式を入れる

End Sub

としたら、その列の最終行(65536行)まで計算式がコピーされてしまいます。
どなたか、bのセルの最終行(行は任意、ケースバイケースで最終行が変わる)
方法をご教授していただきますよう、お願いします。
902デフォルトの名無しさん:04/12/07 22:49:04
>>901
Range("c3", Range("c3").End(xlDown)).PasteSpecial
                      ↓
Range("c3", Range("c65536").End(xlUp))).PasteSpecial

最終行から上に向かって飛ばす癖をつける方がいいよ。
データの入力された範囲を調べるのにもね。

つか、コピーしてから貼り付けんでも、一発でいれりゃぁいいと思うが。 
Range("c2", Range("c65536").End(xlUp))).Formula = "=a2+b2"             
903902:04/12/07 23:01:31
>>901
たんま、よくコード見てなかった。
Selection.Insert Shift:=xlToRight '一列挿入
ここでC列がD列になっているんだから
Range("c3").End(xlDown)で最終行まで飛んであたりまえ。
だって、データがないんだもの。
904901:04/12/07 23:06:24
>>902,903
さっそくのご回答ありがとうございます。
そうなんです。最終行まで飛んでしまうんです。
列を挿入して、(空白列に)一セルだけデータを入力し(ここまでは出来る
んですが)横のセルにはデータが入ってる最終行までデータを貼り付けする
のは無理なんでしょうか?
905902:04/12/07 23:08:55
Range("c1", Range("c65536").End(xlUp)).Insert Shift:=xlToRight
Range("c2", Range("D65536").End(xlUp)).Formula = "=a2+b2"

この2行ですむんじゃない?
906901:04/12/07 23:24:58
>>902
丁寧なご回答ありがとうございます。
イメージ的には上の記述でいいのですが、これだと、隣のセル(d列まで)
計算式が入ってしまうんです。大変度あつかましいですが、
cの行だけデータを貼り付けする方法をよろしけれ教えてください。
907902:04/12/07 23:35:29
Sub hogehoge()
Dim n As Long
n = Range("C65536").End(xlUp).Row
Range("C1:C" & n).Insert Shift:=xlToRight
Range("C2:C" & n).Formula = "=a2+b2"
End Sub

これでどないでしょ。
908901:04/12/07 23:42:41
902>>

バッチリできました!
大変助かります。ありがとうございました。

dim n as long ・・・と nの意味が分かりません。
とりあえず結果オーライとなりましたが、これからまた勉強します。
ホントVBAって面白いですね。
いままでハンドでちまちま入力していたのはなんだったんだろうか・・・・。

ともあれ、ありがとうございました。
909902:04/12/07 23:52:20
ヘルプで
変数の宣言
って質問してみましょう。( ̄ー ̄)

910902:04/12/07 23:58:09
>>902
ちょうどいま、変数のところを見て、なんとなく意味が分かった
ところです。as long は長整数型の数値型で変数を宣言することなんですね!
(マニュアルをそのまま引用してますが)
911デフォルトの名無しさん:04/12/07 23:59:43
これはどう?

Sub データ行のあるところまで計算式挿入()
  Range("C1", Range("C65535").End(xlUp)).Select
  Selection.Insert Shift:=xlToRight '一列挿入
  Selection.Formula = "=a1+b1"   '計算式を入れる
  Range("C1").ClearContents     'C1はいらないので消す
End Sub
912デフォルトの名無しさん:04/12/08 00:17:33
913デフォルトの名無しさん:04/12/08 03:01:34
エクセルVBAで罫線の位置を調べる(取得する)ことは出来ますか?
無理ならば罫線で囲まれたセルの数でもいいんですが、探しても見当たりませんでした。
知っている方教えてください。
914デフォルトの名無しさん:04/12/10 12:30:16
>>913
こんなかんじでいかがでしょうか。セルを適当に選択してから試してみてください。
Sub test()
Dim x As Object, i As Long
For Each x In Selection
If x.Borders(xlBottom).LineStyle <> xlLineStyleNone Then
i = i + 1
End If
Next
MsgBox "罫線で囲まれたセルの数:" & i
End Sub
915デフォルトの名無しさん:04/12/10 18:39:05
英語版のAceessで、日本語版で作ったAccessのプログラムは動くものなのでしょうか?
勿論表示は全て英語に置き換えます。
916デフォルトの名無しさん:04/12/10 22:43:19
マクロをいじっていたら、エクセルを起動したときに《ファイルが見つかりません》のダイアログが出るようになってしまいました。
何のファイルが見つからないのかさっぱりわからないのですが。。
ちなみにエクセル97です。
917デフォルトの名無しさん:04/12/11 06:37:34
97・・・
そんなもん窓から投げ捨てろ
918デフォルトの名無しさん:04/12/11 14:39:42
モンテカル法でπの値をシミュレーションする 
プログラムを作りたいんですが・・・
919デフォルトの名無しさん:04/12/11 18:20:30
 Dim n As Long
 Dim i As Long
 Dim sum As Long
 Dim c As Long
 Dim cc As Integer

 n = Range("A1").Value
 Randomize
 sum = 0
 c = 100
 cc = 3
 
 For i = 1 To n
  If (Rnd ^ 2 + Rnd ^ 2) < 1 Then
   sum = sum + 1
  End If
  If (i Mod c) = 0 Then
   c = c * 10
   Cells(cc, 1) = i
   Cells(cc, 2) = sum * 4 / i
   cc = cc + 1
  End If
 Next i
 If Cells(cc - 1, 1) <> n Then
  Cells(cc, 1) = n
  Cells(cc, 2) = sum * 4 / n
 End If
920デフォルトの名無しさん:04/12/11 23:14:42
エクセル97なのですが Nameオブジェクトの RefersToに
設定できる文字列の長さって制限とかあるのでしょうか?
絶対参照で30セル分くらいのアドレスに名前をつけたいのですが
なにか制限ありそうな気がしてググったのですが見つかりません。
安心しても大丈夫なのかなぁ? 知っている方すみません教えてください
921デフォルトの名無しさん:04/12/11 23:32:45
>>920
ごちゃごちゃ抜かさんと試せ。
922920:04/12/11 23:54:13
>>921
確かに、おっしゃるとおり。m(__)m
試したところ、260文字前後でアウトでした。(255文字?)
Unionもアドレスがこの文字数超えるとおかしくなっちゃうし、まいった。
みなさん、分散してならんでるセルを名前かなんかでハンドリングしたい場合って
どうされています?
923920:04/12/12 00:07:41
コレクションにいれといて
ループで回すとか、そんな感じになっちゃいますかね。。。
924デフォルトの名無しさん:04/12/13 01:36:24
ブック名:file1.xls
シート:先頭のシート

このシートに、ラベルやコンボボックスなどを並べた操作画面の
イメージがあります。この中から全てのラベルに書かれた文字列
を抜き出し、別のブックなりに一時的にそれらを書き出すには
どうしたらいいですか?
925デフォルトの名無しさん:04/12/13 01:50:45
ワークシートに文字列型で入力してある、"0001"のような値を、
Cells(行,列)で取得しているのですが、数値と判断されてただの1になってしまいます。

どうすれば文字列として扱うことができるでしょうか。
926デフォルトの名無しさん:04/12/13 21:20:41
>>924
イメージからは抜くのは非常に難しい
文字認識エンジンを作れるなら別だが

>>925
Cells(行,列).Text
927デフォルトの名無しさん:04/12/13 21:28:56
初歩的な質問で申し訳ありません。
本日からExcel2000を使用してVBAを始めたのですが、
複数行選択したとき、値が選択した最初の行しか取ることができません。
どのようにすれば全ての値を取ることができるのでしょうか。

どうかよろしくお願いします。
928デフォルトの名無しさん:04/12/13 21:36:35
>>927
Dim rng As Range
For Each rng In Selection
 rng.Value="Hoge"
Next rng
929927:04/12/13 22:21:04
>>928
解決することができました。
大変助かりました。ありがとうございます。
930925:04/12/13 23:18:45
>>926

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

実は値を再び別のセルに挿入するプログラムだったのですが、
挿入時にも数値型に変換されてしまいました。
こちらは挿入時に"'"と文字列連結してから代入することによって解決しました。
あわせてご報告します。
931デフォルトの名無しさん:04/12/13 23:28:21
>>930
そういう場合は下のコード使ったほうがいいんじゃないですか?

A1セルの値をA2セルへ入れる場合。

Range("A1").Copy Destination:=Range("A2") 'コピー
Range("A1").Cut Destination:=Range("A2") '移動
932918:04/12/14 13:12:02
Sub Vba()
Set en = Range("C2:C6")
Set hit = Range("B2:B6")
Const z As Double = 3.14159265358
X = 5
For j = 0 To X
hit = 0
For i = 1 To 10 ^ j
If (Sqr((Rnd * 2 - 1) ^ 2 + (Rnd * 2 - 1) ^ 2)) < 1 Then
hit = hit + 1
End If
Next i
en(j) = 10 ^ j
en(j) = hit / 10 ^ j * 4
Next j
End Sub
このプログラムで円周率の値はでるのですが、このプログラムから
ヒット数をRange("B2:B6")につくりたいとおもいます。
どのようなプログラムが必要なのでしょうか?
力をお貸しください。
933デフォルトの名無しさん:04/12/14 16:08:30
cells( j + 1, 2 ) = hit
934918:04/12/14 19:41:49
>>933
あ、ありがとうございます。
あともう一個質問させてください。
各シミュレーションが終了する度に(10回100回と)、
Msgboxを表示してシュミレーションを続けるかどうかを問い合わせる
ためにはどうすればいいでしょうか?
質問ばっかですいません


935デフォルトの名無しさん:04/12/15 00:01:14
936デフォルトの名無しさん:04/12/15 01:39:08
配列の受け渡しなんですが
Dim X(42) As Variant
Range(Sheet1.Cells(EGYO, 12), Sheet4.Cells(EGYO, 43)).Value = X(11 to 43)

43個の配列変数があって
そのうちの11〜42をセルに入れようと思って
X(11 to 42)
と、書いてみたんだけど無理なようです

やっぱり
Do LoopとかFor Nextで
一個一個入れないといけないんでしょうか?
937デフォルトの名無しさん:04/12/15 01:44:42
訂正です
Dim X(42) As Variant
EGYO As Integer

中略

Range(Sheet1.Cells(EGYO, 12), Sheet1.Cells(EGYO, 43)).Value = X(11 to 42)

こんな感じになってます
938デフォルトの名無しさん:04/12/16 00:22:35
エクセルのグラフの散布図等で、あるデータラベルが他のデータラベルと
重なっているかどうかを判定するような関数を書くにはどうやったら良いのでしょうか?
大量に値をプロットしてラベルを付けるとラベル同士重なって読めなくなってしまって…
適当に間引きしたいのです。
ラベルの topとleftと文字数で地道に計算する方法しか思いつかないのですが
なんか良いやり方ないでしょうか?
939デフォルトの名無しさん:04/12/17 13:37:02
A,B二つのブックがあったとして
BのブックからAに作成してあるUserFormを操作する方法ってあるのでしょうか?
あればヒントだけでもよいので教えていただけないでしょうか。
940デフォルトの名無しさん:04/12/17 20:49:42
VBAで変数の型変換(キャスト)ってできますか?
941デフォルトの名無しさん:04/12/17 21:11:40
CBool(expression)
CByte(expression)
CCur(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CSng(expression)
CVar(expression)
CStr(expression)

942デフォルトの名無しさん:04/12/17 21:56:46
ユーザー定義関数の戻り値として配列を返すのはどうやればいいでしょうか?
943デフォルトの名無しさん:04/12/17 22:14:47
普通にできるぞ
944デフォルトの名無しさん:04/12/18 21:13:40
>>939
Bのブックから、Aのブックを参照設定する。
945デフォルトの名無しさん:04/12/18 23:59:09
エクセル97のVBAなんですが、たとえば以下のクラスがあったとして
<<Class Foo>>
Public Field_A as Long
Public Field_B as String
Public Field_C as Date
このインスタンスが詰まったコレクション Foos があったとします。
このコレクションをField_B, Field_C 等の好きなメンバでソートしたいのですが
どうやったらよいのでしょうか?
946デフォルトの名無しさん:04/12/19 00:40:52
なんかググってみたら
こういうのはADOとかにリンクさせて処理するもんなんでしょうか?
(確かにそのほうがラクそうだ)
947デフォルトの名無しさん:04/12/19 06:29:10
エクセル2000を使っています。
表示しているシートを、VBAを使って
画像として保存することできますか?
948デフォルトの名無しさん:04/12/19 08:42:18
>>947
ウインドウハンドルからデバイスコンテキストを取得してそれの中身をビットマップファイルとして保存すればよいですよ。
949947:04/12/19 14:32:11
>948
ありがとうございます。早速やってみます。
950冷や水:04/12/19 15:46:08
'質問 1 Word VBA
Option Base 1
Sub Q1()
Selection.WholeStory
Selection.Delete
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=4, NumColumns:=6
For K = 1 To 4
For J = 1 To 6
Selection.TypeText Text:="(" & K & "," & J & ")"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Next J
Next K

End Sub
'上記によって4行6列のテーブルを Word2000 の Book1 に作表しました。
'この後、テーブルの2行目と3行目の欄は全て高さを30ミリに、また4列目と5列目の欄は全て横幅を15ミリに変更しようと思います。
'End Subの前に何を追加すべきでしょうか。どなたかご教示いただけると有難いです。

951デフォルトの名無しさん:04/12/20 14:17:20
A1とC1のセルを選択していたとして。コードでA1のセルの選択だけを解除したいときはどうやったらいいのでしょうか?
952デフォルトの名無しさん:04/12/20 14:31:22
C1を選択で出来ない?
953デフォルトの名無しさん:04/12/20 17:48:32
>>952
出来ましたがA1,C1,E1と3つあってA1だけ解除したいときE1も選択解除されてしまいます。
こういった場合はどうすればいいのでしょうか?何度もすいません。。
954デフォルトの名無しさん:04/12/20 17:58:54
仕様かわってんじゃん…
955デフォルトの名無しさん:04/12/20 20:55:28
>>953
Range("C1,E1").Select
956デフォルトの名無しさん:04/12/22 16:07:57
教えてください。
Excel2000でクリップボードのクリアをするVBAがわかりません。
マクロの記録をしても記録されないようです。
よろしくお願いします。
957デフォルトの名無しさん:04/12/22 17:18:38
>>956
EmptyClipboard
958デフォルトの名無しさん:04/12/23 09:11:36
>>956
Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long 'クリップボードをオープン
'クリップボードを空にし、クリップボード内のデータのハンドルを解放
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function CloseClipboard Lib "User32" () As Long 'クリップボードをクローズ
'クリップボードクリア関数呼び出し 別にこれを呼び出さなくても直接CLR_ClipBoard "" でかまいません
Sub ClipCLR()
CLR_ClipBoard ""
End Sub

Function CLR_ClipBoard(myString As String)
Dim ret As Long

'クリップボードオープン
If OpenClipboard(0&) = 0 Then
GoTo ERR1
End If
'クリップボードクリア
ret = EmptyClipboard()
'クリップボードクローズ
If CloseClipboard() = 0 Then
GoTo ERR2
End If
Exit Function
ERR1:
  MsgBox "クリップボードが開けません(エラー)"
  Exit Function
ERR2:
  MsgBox "クリップボードが閉じれません(エラー)"
  Exit Function
End Function
959デフォルトの名無しさん:04/12/23 17:54:24
>>956
ひょっとして、VBAでブックを閉じる時に「クリップボードに大きな情報があります」
ってエラーを出さないようにしたいからですか?
960デフォルトの名無しさん:04/12/25 14:15:28
変数にセルの情報として条件付書式設定で設定した色を
入れることはできないんですか?
「.Text」だと書式のみになってしまいます。
961デフォルトの名無しさん:04/12/26 08:37:23
>>960
このあたりの事?
.Interior.ColorIndex = 6
.Interior.Pattern = xlSolid
962960:04/12/26 14:05:11
>>961
それは色をあらかじめ指定しておかないといけない、ということですか?

963デフォルトの名無しさん:04/12/26 14:07:19
>>962
明らかに違います。
964デフォルトの名無しさん:04/12/27 04:02:31
If Selection = SpecialCells(xlCellTypeBlanks)
といった、もしアクティブセルが空白だったら Exit Sub する
といったのを書きたいのですがどうしてもわからないので教えてくれませんか。
965vba3週間目:04/12/27 07:30:10
まだまだ初心者ですが
If Cells(*,*)<>""Then
じゃだめかな?
966デフォルトの名無しさん:04/12/27 19:08:38
vba3週間目さん、解答してもらいありがとうございます。
Cells(*,*)といった形ではなく、SelectionかActiveCellを使いたかったんですが
一応、
If Selection.Value = " " Then でできました。
967デフォルトの名無しさん:04/12/27 21:55:02
If ActiveCell.Value = "" Then でもいけるし。
968デフォルトの名無しさん:04/12/27 22:26:06
>>960
アクティブセルが対象だとして、条件書式の1番の色を拾うには
myColorIndex = ActiveCell.FormatConditions(1).Interior.ColorIndex
969デフォルトの名無しさん:04/12/28 10:25:59
VBエディタで、nameNumberという変数を作ったとします。
naまで入力したら、何かキーを押すと補完してくれる、
という機能があったら教えて下さい。
970デフォルトの名無しさん:04/12/28 12:11:00
A列の1行目から10行目の中で太字になっている数字を合計しA11に表示したい
のですが、「太字のみ」という処理がうまく出来ません。
教えていただけないでしょうか?
971デフォルトの名無しさん:04/12/28 13:29:00
>>970

Public Sub test()
Dim intSUM As Integer
Dim I As Integer
    intSUM = 0
    For I = 1 To 10
        If Range("A" & I).Font.Bold = True Then
        intSUM = intSUM + Int(Range("A" & I).Text)
        End If
    Next I
    Range("A11") = intSUM
End Sub
972970:04/12/28 14:48:03
>>971
ありがとうございます。できました。
973デフォルトの名無しさん:04/12/30 17:27:22
すみません、馬鹿な質問かもしれません・・・が、教えてください。
JISコードをSJISに変換する関数とかってありますでしょうか?
974デフォルトの名無しさん:04/12/31 16:50:43
>>969
Ctrl + Space
975デフォルトの名無しさん:05/01/01 14:14:05
           ∧_∧   ┌────────────
       ◯( ´∀` )◯ < あけおめ!
        \    /  └────────────
       _/ __ \_
      (_/   \_)
           lll
976デフォルトの名無しさん:05/01/03 00:35:05
VBAのuserform上に線とか四角形など
描くことってできるのでしょうか?
977デフォルトの名無しさん
書ける