Excel VBA質問スレ Part6 at TECH
[2ch|▼Menu]
[前50を表示]
100:デフォルトの名無しさん
08/03/21 12:11:13
dim name as string
name=range("a1")
if name=textbox1 then
msgbox("有")
end if

このtextbox1の入力 大文字 小文字でも 認識させたいのですが
どう処理したらいいのでしょか?
例えば range("a1")のデータが a0001 textbox1の入力がA0001
この場合もmsgbox(”有”)と拾ってもらいたいのですが・・・


101:デフォルトの名無しさん
08/03/21 12:14:06
>>100
なんとなく違う回避方法もある気がするが、
StrConv
で、小文字に統一してから比較する

102:デフォルトの名無しさん
08/03/21 12:37:55
StrConv の使い方は フォ-マットですか?
それとも、dim name as StrConv と書くのでしょか?


103:デフォルトの名無しさん
08/03/21 12:47:16
ヘルプ読め

104:デフォルトの名無しさん
08/03/21 13:17:57
>>100
if name=textbox1 then
→If StrComp(name, textbox1, vbTextCompare) = 0 then

ところで、msgboxの()は必要なの?

105:デフォルトの名無しさん
08/03/21 13:18:39
msgbox("変数同士は大文字小文字関係なく比較するのだが、" & vbnewline & _
      "textboxは厳密に判定するのか?")

' 実際にtextboxを配置してみての実験はしていない

106:デフォルトの名無しさん
08/03/21 13:20:41
if lcase(name) = lcase(textbox1.text) then
でいいんじゃあるまいか。

107:デフォルトの名無しさん
08/03/21 14:56:57
100です。皆様ありがと御座います。
本当はmsgbox()のところは、分かりやすく質問させてもらうため
簡単に仮に置いただけです。
本当は FOR EACH と組み合わせて、膨大な数あるデーターの中から
対象データを抜き出したいのです。
今のコードは下記の様に書いてるのですが、
Dim name As String
name = textbox1.text

Dim 範囲, 名前

Set 範囲 = Range("a1:z10000")
For Each 名前 In 範囲
If 名前.Value = name Then
名前.Select
end if
全てがそろってないと拾ってくれず、半分手作業状態で困ってました。
一応、上記コードでやって見ましたが、for each とうまくかみ合いません
再び、ご教授お願いします。

108:デフォルトの名無しさん
08/03/21 15:28:00
最初からやりたいことを書きましょう。

dim 範囲 as range, 名前 as range
set 範囲 = range("a1:z10000")
set 名前 = 範囲.find(textbox1.text, lookat:=xlwhole)
if not 名前 is nothing then
名前.select
end if

109:デフォルトの名無しさん
08/03/21 15:57:09
大文字と小文字全て一致してないと、拾ってくれません。
もうちょっと、いじくってみます。


110:デフォルトの名無しさん
08/03/21 16:33:11
原因が分かりました。
半角の小文字aと全角の小文字aの違いが有ると拾わないみたいです。


111:デフォルトの名無しさん
08/03/21 17:18:17
>>110
StrConv

112:デフォルトの名無しさん
08/03/21 17:23:52
永久ループ

113:デフォルトの名無しさん
08/03/21 18:07:08
トリビア

明示はサ変名詞なので的が付く対象ではない
したがって明示的というのは日本語風の言語使用方法に過ぎない


114:デフォルトの名無しさん
08/03/21 21:14:50
>>113
なぜサ変名詞に的がついてはいけないの?

115:デフォルトの名無しさん
08/03/21 23:06:23
VBAでオラクルのテーブル読めますか?

116:デフォルトの名無しさん
08/03/21 23:57:02
よんだことあるけどしるか!ってかんじ

117:デフォルトの名無しさん
08/03/22 00:37:29
>>115
excelからやると結構面倒
その辺になるとACCESSのほうがいいかも。
ODBC経由でオラクルのテーブルをリンクできるようにしてから、openrecordsetすれば簡単

118:デフォルトの名無しさん
08/03/22 00:43:43
oo4oってもうないんだっけか

119:デフォルトの名無しさん
08/03/22 12:49:32
Oracleに接続するぐらい別に面倒じゃない
VBSからでも使える程度のよくあるケース

120:デフォルトの名無しさん
08/03/22 13:54:20
VBAってさぁ、ソース丸見えなんだけどさ見えなくできないの?

121:デフォルトの名無しさん
08/03/22 14:51:54
パスワードをかければ、カジュアルなプロテクトはできる。
ただし、はずし方もググればすぐにわかるんだけどね・・・

122:デフォルトの名無しさん
08/03/22 15:59:13
当方環境
【OS】WinXP Home
【バージョン】Excel2002

質問させて頂きます。
数あるレコードの中から番号を選択して、内容を反映させたデータ閲覧用フォーム2を表示させています。
画面で見るだけではなくそれを印刷に流用できればと考えましたので、用紙サイズをA4・印刷方向を横に設定する以下の記述を追加しました。

Private Sub CommandButton3_Click()
  UserForm2.PrintForm
  Printer.Orientation = vbPRORLandscape
  Printer.PaperSize = vbPRPSA4
End Sub

実行すると印刷はされるものの、A4縦で印刷されてしまいました。
A4横に設定するには、どのように記述すればよろしいのでしょうか?
ご存知の方いらっしゃいましたら、宜しくご教示お願いします。

123:デフォルトの名無しさん
08/03/22 20:48:45
ググッたらこんな使い方してたみたいだけど?
Forms("フォーム名").Printer.Orientation = acPRORLandscape

それかプリンターの設定で縦になってるから云々とか

124:デフォルトの名無しさん
08/03/23 01:50:42
1ヶ月の超初心者です、教えて下さい。
条件分岐でそれぞれの製品(4製品)が5000以上になったらOKになるようにしたいのですが
どう書けばいいのでしょうか?それぞれの時の書き方が分かりません。D4:F7 は範囲です。
宜しくお願いします。
If Range("d4:f7").Value >= 5000 Then
msgbox"ok"
Selection.Value = "ok"
Else
Selection.Value = "no"


125:デフォルトの名無しさん
08/03/23 02:23:53
質問の内容がよくわからない。4製品?何に対しての?
5000以上っていうのはD4:F7全ての合計なのか
1個1個のセルの値が5000以上なのかなど

126:デフォルトの名無しさん
08/03/23 02:53:39
4製品というのは例えばストーブ、掃除機、時計、テレビで
1個1個のセルの値が5000以上になるものです。合計は全く関係ありません。
4製品の全ての値が5000(円)以上になっているものに対してOKになるようにしたいのですが。
説明が下手ですみません。



127:デフォルトの名無しさん
08/03/23 03:05:48
D4:F7って9セルあるけど?4製品?

128:デフォルトの名無しさん
08/03/23 03:15:07
9セルじゃなくて12セルか

129:デフォルトの名無しさん
08/03/23 03:16:31
すみません。金額の範囲はC4:F7でした。16セルです。

130:デフォルトの名無しさん
08/03/23 03:53:41
これでおk?

'対象のワークシートを変数wkに格納
Set wk = Worksheets("Sheet1")

'対象のワークシートの範囲の開始("C4")から終了("F7")までを変数currentCellにセットしてループ
For Each currentCell In wk.Range("C4:F7")

'対象のセルの値が5000以上だった場合
If currentCell.Value >= 5000 Then
currentCell.Value = "ok"
End If

Next currentCell

131:デフォルトの名無しさん
08/03/23 04:11:38
ご親切にどうもありがとうございました。

132:デフォルトの名無しさん
08/03/24 15:54:55
ちょっとスレ違いかもしれませんが、教えてください。

以下のようにマクロを使わず、セルに入ってるデータをセルの位置として
指定して計算させたいのですが可能でしょうか?

SUM(A1のデータ:A2のデータ)


例えば、以下のようにデータが入力されているとき、

A1のセルに"B1"
A2のセルに"B10"

マクロを使わずSUM(B1:B10)が行われるようにするにはどうすればよいでしょうか?


133:デフォルトの名無しさん
08/03/24 16:14:10
indirect()

134:デフォルトの名無しさん
08/03/24 16:20:33
>>133
おー!ありがとうございます!!

135:デフォルトの名無しさん
08/03/25 23:10:05
Excelを他のプログラムからCreateObjectして操作するときに、
そのEcelのオブジェクトのApplicationからメッセージボックスを
表示するようなことはできますか?Excelにマクロを定義しといて
呼び出すという方法じゃなくて、直接メッセージを表示するような
ことがやりたいです。

136:デフォルトの名無しさん
08/03/26 01:20:08
できる

137:デフォルトの名無しさん
08/03/26 01:29:29
そのためにわざわざExcel使うか?

138:デフォルトの名無しさん
08/03/26 21:19:57
質問です。
VBAの処理のみでAccessに依存することなく、Accessのデータテーブルから
エクセルのシートにデータ内容をExportしたり、エクセルのシートの内容をデータベースに
Importすることはできるのでしょうか?

139:デフォルトの名無しさん
08/03/26 23:03:13
>Accessに依存することなく、Accessのデータテーブルから
???

140:デフォルトの名無しさん
08/03/26 23:20:00
>>136
どのオブジェクトの何というメソッドを使うのか教えていただけないでしょうか。

141:デフォルトの名無しさん
08/03/26 23:59:32
138です。
Accessを使ってシートにデータをExportをしますが、Accessは使わずにVBAの
機能のみでシートにデータを取り込みたいです。

142:デフォルトの名無しさん
08/03/27 00:16:40
excelのvbaだけでは無理

143:デフォルトの名無しさん
08/03/27 00:39:27
質問です。
WindowsXP Excel2000を使っています。
Excel VBAで、画像ファイル(.jpgとか.tifとか)をビューアなどで開かず、
直接印刷する方法を教えてください。
単純に印刷するだけならシェルを使って何とかなったのですが、
用紙サイズや向きの指定をしたく、その方法がまったくわかりません。
よろしくおねがいします

144:デフォルトの名無しさん
08/03/27 07:01:01
>>138 >>141
ADOとかDAOを使えばそんな感じの事はできる
インポート/エクスポートとはちょっと違うけど

145:デフォルトの名無しさん
08/03/27 11:30:02
セルをマウスでセレクトして外側は太い罫線、中は細い罫線をひくというような
共通で使えるVBAを作ったのでエクセルを開くたびに常にそのVBAを読み込みたいです。

現在は***.vbaファイルを保存しておき、そこからxlaファイルにしてそれをアドオンでエクセル起動時に読ませています。
これだとVBAを修正するときは、

新規でエクセルを立ち上げ

VBEで***.vbaを読み込み

編集後別名のxlaファイルに保存(同一ファイルはエクセル起動時に開かれるのでさわれない為)

エクセルを閉じ、作ったxlaファイルを設定しているxlaファイルに置き換え

と面倒な事になっています。※xlaファイルはダイレクトに編集できないようだ
みなさんは作ったVBAをどのように管理していますか?


146:デフォルトの名無しさん
08/03/27 13:17:35
つ個人用マクロブック

147:デフォルトの名無しさん
08/03/27 18:33:14
QueryTables.Add()メソッドで
Connection情報を指定する際に

Jet OLEDB:Engine Type=?

?に対してはどんな値を指定するのが妥当なんでしょうか?


ちなみに↓を見てたのですが全く意味がわかんなかったんです。。
URLリンク(www.microsoft.com)


148:147
08/03/27 20:55:55
ちなみに

OLE DBプロバイダを使用して
あるExcelファイルのシートのデータを
新規シートへコピーするのをやろうとしてます。

149:デフォルトの名無しさん
08/03/27 21:06:00
>>144さん
ADOを調べて
public sub toridasi()
Dim cnn as NEW ADODB.Connection
Dim rs As NEW ADODB.Recordset
set cnn = NEW ADODB.Connnection
cnn.Connection String = _
   略
   略
cnn.Open
set rs.Open Source = 略

といった感じでやったらできました。

質問なのですが今度はデータベースから取り込むのではなく、
Excelのシートの内容をデータベースに書き込むにはどうしたらいいですか?

150:デフォルトの名無しさん
08/03/27 22:34:35
>>149
まあこの辺見るとかググるとかして頑張ってください
URLリンク(www.asahi-net.or.jp)

151:デフォルトの名無しさん
08/03/27 23:00:59
指定フォルダ内の複数ファイルに対して
文字列の置換処理をしたいのですが
どのように書けばいいのでしょうか?

152:デフォルトの名無しさん
08/03/27 23:07:35
ファイル開く→置換

153:デフォルトの名無しさん
08/03/27 23:11:07
>>150さん
このサイトは見たことがありますが参考になりませんでした。

154:デフォルトの名無しさん
08/03/28 00:43:16
>>153
そこに書いてあることが理解できない段階なら、
まじめにVBAの本を買って、勉強したほうがいいんじゃないかなと思う。

155:デフォルトの名無しさん
08/03/28 02:24:22
>>153
DAOで、試験的にやってみました。
あらかじめ、TEST.mdbの中に「受注」テーブルがある場合です。
ワークシート「受注」の4行目から9行目までを新規レコードに追加します。

Sub Data_Export()
Dim WS As Worksheet, r As Long
Dim db As Database, rs As DAO.Recordset

Set WS = Worksheets("受注")
Set db = OpenDatabase(ThisWorkbook.Path & "\TEST.mdb")
Set rs = db.OpenRecordset(Name:="受注", Type:=dbOpenDynaset)

For r = 4 To 9
With rs
.AddNew
.Fields("日付").Value = WS.Cells(r, 2).Value
.Fields("顧客名").Value = WS.Cells(r, 3).Value
.Fields("注文番号").Value = WS.Cells(r, 4).Value
.Fields("品名").Value = WS.Cells(r, 5).Value
.Fields("単価").Value = WS.Cells(r, 6).Value
.Fields("数量").Value = WS.Cells(r, 7).Value
.Update
End With
Next r

db.Close

End Sub

参考になればよいですが。

156:155
08/03/28 04:48:08
ちょっと修正

Next r の次から
---------------------------
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

End Sub
---------------------------

157:145
08/03/28 10:03:57
>>146

ありがとうございます。
個人用マクロ調べてみました。
これだと下記にファイルを置かれてしまうようなのですが、
管理するマクロファイルは任意の場所に置いて管理したいです。

C:\Program Files\Microsoft Office\Office\XLStart

何か方法はありますでしょうか。

158:デフォルトの名無しさん
08/03/28 18:33:56
>>157
俺は
ツールバーにマクロのコマンド作る

159:135
08/03/28 23:15:33
135なのですが・・・結局できないわけですか・・・。

160:デフォルトの名無しさん
08/03/29 00:13:38
余裕でできる

161:デフォルトの名無しさん
08/03/29 00:25:20
>>135
何で困ってるのかさっぱりわからん。

162:デフォルトの名無しさん
08/03/29 01:48:52
application.assistant.doalert
or 余裕
application.executeexcel4macro "alert(...)"
or さらに余裕
application.executeexcel4macro "call(""user32"",""messagebox"",..."
or さらにさらに余裕
...

163:デフォルトの名無しさん
08/03/29 12:35:12
>>135
もっと何をしたいのか具体例を挙げてくれないと
出来るとしか答えられん。

164:デフォルトの名無しさん
08/03/29 15:01:22
>>163>>162

165:デフォルトの名無しさん
08/03/29 15:23:42
>>161 >>163
>>140

まあ一応>>162で答え出てんじゃね

166:デフォルトの名無しさん
08/03/30 19:16:39
OS WindowsXP
Excel 97
で、
a1.a2.a3.….an を
an,a1.….a(n-1) と並べ替えるにはどうしたらいいんでしょうか。
a1〜anは英数字、カタカナ、漢字です。
よろしくお願いします

167:デフォルトの名無しさん
08/03/30 20:05:33
>>166
an

168:デフォルトの名無しさん
08/03/30 20:06:16
みすったorz
anをa1のセルに移動(insert)するだけでいいんじゃないのか?
ってかXPでなんで97なんだ?

169:デフォルトの名無しさん
08/03/30 20:06:21
エスパーさん、出番ですよ

170:デフォルトの名無しさん
08/03/30 20:12:14
vbaじゃなくて並び替えですることだろ

171:デフォルトの名無しさん
08/03/30 20:24:37
手早いレスありがとうございます。
>>168
一つのセルの中に「.」で区切られた状態で入っているので・・
97なのはwin95のPCで読めるようにしてたのかと。。

>>170
どのようにすればいいんでしょうか

172:デフォルトの名無しさん
08/03/30 20:26:48
>>171
それは本当にVBAでやらなきゃならんことなのか?
後ろから「,」を検索してその位置以降の文字列を前に持ってくるだけだろ?
Excelの関数で事足りると思うのだが?

173:デフォルトの名無しさん
08/03/30 20:29:22
>>172
並び替え以前は全て「.」で区切られているので・・
またデータが大量にあるためマクロで処理したいです。

174:デフォルトの名無しさん
08/03/30 23:35:03
>>173
1.関数で別シートに写像
2.シート全体を選択してコピー→値の貼り付け

175:デフォルトの名無しさん
08/03/30 23:36:48
>>166

あ.い.う.え.お
と並んでいるものを、
お.あ.い.う.え
と並べたいのか?


お.え.う.い.あ
と並べたいと言う意図だとan,a1.….a(n-1) はおかしいし・・・
意味が分からん。

176:デフォルトの名無しさん
08/03/30 23:44:36
たくさんのcell内のデータを並びかえるのだから
自前でsort関数つくるのがいいだろ

177:デフォルトの名無しさん
08/03/30 23:46:51
>>175
俺も意味が判らんかったが、そういう意味で解釈すると、こうかな?

Function test()
Dim LastStr As String
Dim maxy As Long
maxy = 5

LastStr = Range("A" & maxy)
For i = maxy To 2 Step -1
Range("A" & i) = Range("A" & i - 1)

Next
Range("A1") = LastStr

End Function


178:デフォルトの名無しさん
08/03/30 23:48:43
>>177
並べ替えたいものは「1つのフィールドに入っている」んじゃないか?

179:デフォルトの名無しさん
08/03/31 00:01:58
>>178
そういう意味?
ならこれでどうだ?

Function test()
Dim baseText As String
Dim KekkaText As String
Dim varStr() As Variant
Dim i1 As Long, i2 As Long
Dim maxy As Long
'
baseText = "あいうえお.aiueo.アイウエオ.アイうえオ.aiウエお"
i2 = 0
'
ReDim Preserve varStr(i2) As Variant
For i1 = 1 To Len(baseText)
If Mid(baseText, i1, 1) = "." Then
i2 = i2 + 1
ReDim Preserve varStr(i2) As Variant
Else
varStr(i2) = varStr(i2) & Mid(baseText, i1, 1)
End If

Next
'
KekkaText = varStr(UBound(varStr))
For i1 = 0 To (UBound(varStr) - 1)
KekkaText = KekkaText & "." & varStr(i1)
Next
'
MsgBox (KekkaText)
End Function

180:デフォルトの名無しさん
08/03/31 00:21:21
いいんじゃね?
あとは自作関数化すれば何セルあっても動作するするだろ
それくらいは自分でなんとかすればよし、というところか。

181:166
08/03/31 00:39:56
>>174
どうもです
>>175
あ.い.う.え.お
と並んでいるものを、
お,あ.い.う.え
です。 「お」の後がコンマになってます。
>>177-180
ありがとうございます。
おきてからやってみます


182:179
08/03/31 00:48:02
>>181
おの後ろはカンマにしたかったのか。
それは実装できてないわ。
まぁ、ドットで区切って、並び替えて、再結合は実現しているので、
あとは別に苦労しないだろ。

183:デフォルトの名無しさん
08/03/31 01:54:26
Sub foo(r As Range)
Dim cell As Range
Dim pos As Long
Dim buf1 As String, buf2 As String
For Each cell In r
pos = InStrRev(cell.Value, ".")
If pos > 0 Then
buf1 = Right$(cell.Value, Len(cell.Value) - pos)
buf2 = Left$(cell.Value, Len(cell.Value) - Len(buf1) - 1)
cell.Value = buf1 & "," & buf2
End If
Next
End Sub

Sub bar()
foo Range("A1:A10")
End Sub


184:デフォルトの名無しさん
08/03/31 02:09:14
行頭から半角5文字目の空白を;に変えたい

185:デフォルトの名無しさん
08/03/31 08:11:53
>>183


>>166 [Excel97]
×InStrRev

186:デフォルトの名無しさん
08/03/31 10:21:31
>>179
なんだその吐き気がするコードは。
Excel97にはSplitすらないのか?
仮に無いとしても、>>172で十分だろ。

187:デフォルトの名無しさん
08/03/31 10:23:08
いちいち"."で分割して結合する意味がわからん

188:デフォルトの名無しさん
08/03/31 11:14:25
>>186
97にはsplitもなければInstrRevもない。

189:デフォルトの名無しさん
08/03/31 11:22:56
Replaceもなかったりする

190:デフォルトの名無しさん
08/03/31 11:24:40
>>188
>>187

191:デフォルトの名無しさん
08/03/31 11:27:35
意味なんてものはその職場の風習によるだろ。

192:デフォルトの名無しさん
08/03/31 11:29:51
>>191
意味わからん

193:デフォルトの名無しさん
08/03/31 11:32:30
あー、糞コードを量産する職場だったら、>>179を見ても違和感がないという意味か

194:デフォルトの名無しさん
08/03/31 11:38:41
instrくらいあるだろ

195:デフォルトの名無しさん
08/03/31 11:42:39
>>166で意味がわからんって、どんだけ読解力無いんだよ・・・

196:デフォルトの名無しさん
08/03/31 11:47:25
>>172

>>34

197:166
08/03/31 20:28:10
>>182
上手くいきました。 ありがとうございます。

>>他住人の方
ありがとうございました。

198:デフォルトの名無しさん
08/03/31 21:12:14
まあ確かに>>179のコードはアレだが、問題が解決する側にとっちゃどーでもいい話ではあるな

199:デフォルトの名無しさん
08/03/31 22:24:02
見苦し

200:デフォルトの名無しさん
08/04/01 05:44:27
>>182
なんでこいつこんなにえらそーなんだ

201:デフォルトの名無しさん
08/04/01 08:34:03
VBA使いは総じてえらそう

202:デフォルトの名無しさん
08/04/01 09:16:55
>>1-201
質問者以外全部えらそーに見える俺は文盲

203:デフォルトの名無しさん
08/04/01 09:51:32
excel97って、left$もright$も無いの?

204:デフォルトの名無しさん
08/04/01 21:47:10
public Sub AAA()
  Dim cnn as New ADODB.connection
  Dim RS as New ADODB Recoreset
  Dim value As Boolean

  cnn.connection String = _
  "Provaider = micosoft.Jet.DLEDB.4.0;" & _
  "Data Source = D:\データ.mdb:"

'**************ダイアログボックス表示
  value = Application.Dialogs(xlDialogSaveAs).Show
  If value = False Then
    Exit Sub
  End If
**************


205:デフォルトの名無しさん
08/04/01 21:57:04
続き
  cnn.Open
  Set RS = New ADODB.Recordset
  RS.Open Source := "テーブルデータ" ,ActiveConnection:=cnn, _
  Corsor Type := adOpenstatic, Option := adCmdTable
  ThisWorkbook.Sheets(1).range("A1").CopyFromRecordset RS

  RS.Close
  Set.Close
  cnn.Close
  Set cnn = Nothing
End Sub

質問なのですが、上記を実行するとダイアログボックスが表示されて新規でファイルを
作成して今現在動かしているエクセルブックの名前を変更して保存しているだけになってしまいます。
結局元のブック(マクロ)をコピーしているのと同じです。

私のやりたいことはダイアログボックスを表示させて、新規でブックだけ作成してデータベースのデータ.mdbのテーブルだけを
新規ブックシートに書き込みたいです。どうすればいいでしょか?

206:デフォルトの名無しさん
08/04/02 03:55:51
>>205 サンプルを作ってみました。
'---------Sample-----------
Sub Data_Import()
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim ShinkiFullName As String, ShinkiFile As String
Dim wb As Workbook, ws As Worksheet, c As Integer

Workbooks.Add ' ブックを新規作成
ShinkiFile = ActiveWorkbook.Name '新規ブックの名前を格納@

'エクセルと同じフォルダにある「TEST.mdb」に接続
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\TEST.mdb"
cn.Open
'「TEST.mdb」内の「受注」テーブルを参照
rs.Open Source:="受注", ActiveConnection:=cn, CursorType:=adOpenForwardOnly, LockType:=adLockReadOnly

'新規ブックのSheet1にデータを写す
Set wb = Workbooks(ShinkiFile): Set ws = wb.Worksheets("Sheet1")
With ws
For c = 0 To rs.Fields.Count - 1 'フィールド名をA1から横にコピー
.Cells(1, c + 1).value = rs.Fields(c).Name
Next c
.Cells(2, 1).CopyFromRecordset rs 'レコードをA2以降にコピー
End With

'接続終了
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

'***** つづく*****

207:206
08/04/02 04:25:09
'***** つづき *****
Shitei: 'ファイル名を指定/ファイル名が適切なものになるまでダイアログボックスを閉じないA
Do
ShinkiFullName = Application.GetSaveAsFilename(FileFilter:="Microsoft Excel ブック (*.xls),*.xls", _
Title:="新規データファイル保存")
Loop Until ShinkiFullName <> "False"

On Error GoTo Shitei 'ファイル名が重複した場合
With wb
.SaveAs Filename:=ShinkiFullName
.Close
End With
End Sub

-------Sample おわり----------

○あらかじめブックを作成・レコードを転写した後に、保存する場所・ファイル名を決めるようにしてあります。
 (意図されている手順を変更しています。)>@、A
○変数にvalueなどの予約語は使わないようにしましょう。
○Application.Dialogs(xlDialogSaveAs).Showでは、ファイル名を取得できません。
 GetSaveAsFilenameやGetOpenFilenameの使い方をマスターされるとよいでしょう。

208:デフォルトの名無しさん
08/04/02 09:35:56
Cで言う「構造体の配列」みたいなのは、
なにで実現するのでしょうか。

209:デフォルトの名無しさん
08/04/02 10:19:58
ユーザ定義タイプの配列

210:デフォルトの名無しさん
08/04/02 12:42:58
ユーザーフォーム上のコマンドボタンを押したとき
ボタンのオブジェクト名を変数に格納する方法ってありますかね?

211:デフォルトの名無しさん
08/04/02 12:43:45
↑あ、質問間違えた。無視していい。

212:デフォルトの名無しさん
08/04/02 22:51:53
>>206.207さん大変貴重な情報ありがとうございます。さっそく試してみます。
明日に結果を報告します。

213:デフォルトの名無しさん
08/04/04 13:05:00
いつのまにかVBEのマウススクロールができるようになってたんだが。。
なんで??

Excel2003

214:デフォルトの名無しさん
08/04/04 15:59:16
ユーザ定義関数で説明文を書くには
MacroOptionsを使えばよい事がわかりましたが、
引数ごとの説明文を設定するのはどうしたら
良いですか?

215:デフォルトの名無しさん
08/04/04 19:45:26
質問です。

Application.visible = falseで本体を隠したユーザーフォーム上のコマンドボタンを押すと
新しいウィンドウでExcelのファイルを開くようにしたいのですが、どうしたらいいですか。

216:デフォルトの名無しさん
08/04/04 21:14:38
そういうふうにすれば?

217:デフォルトの名無しさん
08/04/04 23:53:05
>>213
たぶんマウスのドライバ。MSのIntelliPoint使ってるだろ?俺もなってた。

218:デフォルトの名無しさん
08/04/05 14:39:37
>>217
確かにマウス交換した。そういうことかー。サンクス

219:デフォルトの名無しさん
08/04/05 17:09:01
まさかと思うが、VB6のVBEでもスクロールできるようにするプラグインがあるのもご存じない?

220:デフォルトの名無しさん
08/04/05 19:59:18
VB6はわかりませんがどこでもホイールはまさかしたら

221:デフォルトの名無しさん
08/04/06 22:54:34
URLリンク(support.microsoft.com)

222:デフォルトの名無しさん
08/04/07 12:07:05
>>213
解決したみたいだけど sp3で 普通にできるようになったよ

223:デフォルトの名無しさん
08/04/07 15:12:34
>>221
このアドインはバグがあるからダメ

224:デフォルトの名無しさん
08/04/07 15:29:08
AddAutoScrollというものを使ってる

225:デフォルトの名無しさん
08/04/07 18:30:21
グラフ番号
(オートでVBAを記述させたときの『DrawingObjects("グラフ 2")』などの『2』の部分)
は、グラフを作るたびに自動で振られていきますが、
グラフを消去した場合も番号は累計されていってしまいますよね。
いったんグラフを作って消してから、グラフ番号をリセットすることは可能ですか?
(オートで書いた場合に、番号が『1』になるようにしたい。)

グラフ番号をリセットする魔法を教えてください。

WinXP、Excel2003です。

226:デフォルトの名無しさん
08/04/07 20:56:21
質問をさせてください。
やりたい事は変数を用いて、範囲を選択する事です。

range("A1:C3").select のように範囲を選択する際に、変数を用いたく考えております。

dim hoge , piyo
hoge = 1
piyo = 3
cells(hoge,1).select

で単一セルは選択できたのですが、範囲指定が分かりません。
cells(hoge,1) から cells(piyo,3) までを選択する方法を教えて頂けたらば幸いです。

何卒ご指導をよろしくお願いします。

227:デフォルトの名無しさん
08/04/07 22:33:10
>>266
Range(Cells(hoge,1), Cells(piyo,3)).Select
たしかRangeとcellsは同シートじゃないとエラー出るのに気をつけてね


228:デフォルトの名無しさん
08/04/08 01:19:11
>>225
確かExcel再起動しない限り不可能だったようなことをどこかで読んだ記憶がある。
で、シートの追加・削除を行うマクロを長時間起動したままだとそのうち落ちるとかだったかな?

あいまいでごめん。

229:デフォルトの名無しさん
08/04/08 12:59:51
一つのセルに複数のセルを代入したいのですが、どうやればいいですか?
一つの場合
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9")
というようにやっているのですが、二つ以上になって
Sheets("入力シート").Range("C1") = Sheets("共通設定シート").Range("D9:E9")
みたいにやると、何も表示されなくなってしまいます。

230:デフォルトの名無しさん
08/04/08 13:10:14
>>229
何がしたいのか理解できない

231:デフォルトの名無しさん
08/04/08 13:25:50
>>230
下の例間違ってました。訂正。
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9:E9")

やりたいことは、例をあげると
シート2のD9に「あい」と入っていてE9に「うえお」と入っているとすると
シート1のC1には二つ繋がった結果「あいうえお」と入れたいです。


232:デフォルトの名無しさん
08/04/08 13:48:32
vbaでやりたいなら、range("d9"),value & range("e9").value
ワークシート関数でいいなら、concatenate


233:デフォルトの名無しさん
08/04/08 14:08:14
>>232
ありがとうございます!出来ました!

234:デフォルトの名無しさん
08/04/08 15:05:42
プリンタのトレイを指定して印刷したいのですが
どうすりゃいいのか惜しえてください

235:226
08/04/08 21:01:07
>>227
上手く選択することが出来ました!
これで作業に幅が出たと思います。

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

236:デフォルトの名無しさん
08/04/08 23:22:30
2003 XP autofilter filtermode 等
「sheet2 range("A1") に、オートフィルターがかかっている(又は、オートフィルターモード)なら、
オートフィルターを解除し、
オートフィルターがかかっていないなら、何もしない。」
どう書いたらいいですか?


237:236
08/04/08 23:24:46
揚げ忘れたwww


238:236
08/04/08 23:48:02
次で解決しました。
Sub filter0()
With Sheet2
If .AutoFilterMode = True Then
.AutoFilterMode = False
End If
End With
End Sub


239:236
08/04/08 23:48:45
次で解決しました。
Sub filter0()
With Sheet2
If .AutoFilterMode = True Then
.AutoFilterMode = False
End If
End With
End Sub


240:デフォルトの名無しさん
08/04/09 20:49:49
質問なのですが、
Sub excel_access4()
Dim dbs As New ADODB.Connection 'ADOコネクション
Dim rcs As New ADODB.Recordset 'ADOレコードセット
Dim mydbF As String 'アクセス ファイル
Dim mydbT As String 'アクセス テーブル
Dim mtr As Variant 'エクセル 全データ
Dim rcd As Long 'アクセス 行指定
Dim fld As Long 'アクセス 列指定
'例として acctest2.mdb の テーブル4 に書き込む

mydbF = "acctest2.mdb" 'アクセス ファイル指定
mydbT = "テーブル4" 'アクセス テーブル指定

'アクセスデータベースを指定
dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\" & mydbF & ";"

'アクセスデータベースを開く
rcs.Open Source:=mydbT, _ 'A
ActiveConnection:=dbs, _  'B
CursorType:=adOpenKeyset, _ 'C
LockType:=adLockOptimistic, _ 'D
Options:=adCmdTableDirect 'E



241:デフォルトの名無しさん
08/04/09 20:50:17
'エクセルシート全データ範囲(2次元配列)
With Worksheets("Sheet1").Range("A1").CurrentRegion
Let mtr = .Resize(.Rows.Count - 1).Offset(1, 0).Value
For rcd = LBound(mtr, 1) To UBound(mtr, 1) '1次行
rcs.AddNew 'LB:最小値(1) UB:最大値(5)
For fld = LBound(mtr, 2) To UBound(mtr, 2) '2次列
'アクセスに行列で書き込み
Let rcs.Fields(fld - 1).Value = mtr(rcd, fld)
Next
rcs.Update
Next
End With

rcs.Close
dbs.Close
Set rcs = Nothing
Set dbs = Nothing
End Sub

AとBはわかりますが、CDEは一体何をしているのかわかりません。

また実行すると実行時エラー3709がでます。
この実行時エラーの原因がさっぱりわかりません。

どなたか詳しい方お教え願えないないでしょうか?

242:デフォルトの名無しさん
08/04/10 01:03:15
VBAでレコード操作したことないけど
カーソルとロックタイプを指定してるだけでしょ。
SQLでレコード扱う場合の基本だからググると(ry

243:デフォルトの名無しさん
08/04/10 15:16:58
Sheet1のB5~B35に曜日を入れていきたくて

Sheets("Sheet1").Range("B5") = ("日")
Selection.AutoFill Destination:=Range("B5:B35")

上のようにVBAで書いて実行したら、エラー"1004" RangeクラスのAutoFillメソッドが失敗しました。って出るんですがなんででしょ?
Excelのほうでオートフィルしたら普通にB35まで曜日が出るんですが、VBAでやりたいので困ってます。


244:デフォルトの名無しさん
08/04/10 15:27:39
Sheets("Sheet1").Range("B5").AutoFill Destination:=Sheets("Sheet1").Range("B5:B35")

245:デフォルトの名無しさん
08/04/10 15:29:24
>>244
ありがとございます、できました

246:デフォルトの名無しさん
08/04/10 15:38:17
マクロの記録で「Selectionは使わない」「Rangeをいつでも明示する」ってオプションがあって、
それがデフォルトでもいい気がする。

247:デフォルトの名無しさん
08/04/10 15:41:19
>>246
やってみます、ありがとう!

248:デフォルトの名無しさん
08/04/10 15:45:53
あ、いやいや、そういうオプションがあったらいいな〜
もしあったら、デフォルトはこれがいいな〜
って妄想なので・・・

249:デフォルトの名無しさん
08/04/10 15:47:20
>>248
なるほど、そういうことですか

250:デフォルトの名無しさん
08/04/10 15:52:49
質問させてください。
WinXP、Excel2007です。
すみません、ヒントだけでもご教授下さい。

データが入ってるシートを選択したときに「sheet3」というシートにアクティブになってるシートのセルの一部をコピーしたいのです。
データが入ってるシートはたくさん増えるので、一個ずつ指定することができません…
手探り手探りつくってみたのがコレです。動きません。

Private Sub Worksheet_Activate()
Range("A3").Copy
ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("D7")
Range("A8").Copy
ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("D4")
Range("B7").Copy
ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("E3")
End Sub

おねがいします

251:デフォルトの名無しさん
08/04/10 15:54:27
もう一ついいでしょうか
フォントの色を変える方法はセルを指定するしかないのでしょうか?
表を作っていてさっき質問したB5~B35に入る曜日の土日だけ赤にしたいと思っています
しかし月によって、どこに土日が入るかわからないのでセル指定ではなくて変数などを指定してやる方法はありますか?
ちなみにSelect文を使って変数の中身を替えています

252:デフォルトの名無しさん
08/04/10 16:15:12
>>250
ThisWorkbookのマクロに
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet3" Then Exit Sub

Worksheets("Sheet3").Range("D7").Value = Sh.Range("A3").Value
'以下略
End Sub

253:デフォルトの名無しさん
08/04/10 16:19:40
>>251
マクロじゃなくていいなら「条件付書式」。
マクロなら、
for each cell in worksheets("sheet1").range("B5:B35")
if cell.value = "土" or cell.value = "日" then
'interiorがうんたらかんたら
end if
next

254:デフォルトの名無しさん
08/04/10 16:20:41
>>253
こればっかりはしょうがないですよね、ありがとうございます!

255:デフォルトの名無しさん
08/04/10 16:38:20
>>252
動きました!!ありがとうございます!!
ですが、sheet3をクリックすると、一瞬だけ表示されて消えてしまうのですが…

256:デフォルトの名無しさん
08/04/10 17:02:21
>>255
どんな現象か良くわからんけど、"Sheet3"を"sheet3"にすると解決する?

257:デフォルトの名無しさん
08/04/10 17:39:30
>>256
そ、それだった!
解決しましたありがとうございます。
本当に助かりました。ご迷惑をおかけしました

258:デフォルトの名無しさん
08/04/10 22:19:48
知恵をお借りしたく、書き込みいたしました。

OS:XPSP2
excel:2003

グーグル先生にお聞きしてみたところ、どうも答えが返ってこないため、こちらに書き込みいたしました。
Excelを利用して、
@Webの検索フォームにA列に記載された文字列を入力し検索
A表示されたページの指定したテキストボックスに記載された文字列をB列に貼り付け
を繰り返すマクロを組もうと頑張っているのですが、どうにもAが解決できません。

できればお知恵を貸していただけないでしょうか?
宜しくお願いします。

259:デフォルトの名無しさん
08/04/10 22:53:35
一概には言えない。
どのページか書いたら、答えが返ってくるかもな。

260:デフォルトの名無しさん
08/04/11 00:05:31
ちょっと外部には出せない類のページでorz

こちらもphpで生成されたhtmlのページしか見れないため、htmlのソースからデータを取り出す形でやっているのですが...

文字列の部分だけを改変したhtmlのソースなら見せられると思うのですが、それでは駄目ですか?

261:デフォルトの名無しさん
08/04/11 00:29:57
なんだ、それなら文字列検索すればいいじゃん。
何が問題なんだ?

262:デフォルトの名無しさん
08/04/11 00:40:18
>>260
大事な情報扱ってるなら2chなんか頼るな
プログラム板、プログラマー板、ソフトウェアー板を徘徊して
ネタ探し回ってる奴いてるよ
解答者の振りして「それじゃ答えられない」「もっと具体的に」と
最後はネタパクられちゃうからね
もしくは「それは素人には無理。業者に出す仕事だ。」色んな言葉で揺さぶられるだけ
動的HTMLは俺も扱った
ここの板で聞いたけどいくら質問しても答えなんかない。
それよりファイル操作できる(ファイルの読み書きできる言語)調べろ
2chで調べたらダメだよ
解答者装った変なのが張り付いてるから
図書館やインターネットで調べてネタは誰にも言うな。
ファイルの読み書きだ。
くどい様だけどマジで2chの板は気おつけろよマジレス。

263:デフォルトの名無しさん
08/04/11 00:59:00
>>262
ありがとうございます。
他の板だと、色々とあるんですが、初めてヌクモリティを感じました。
お世話様でした。ありがとうございます。

264:デフォルトの名無しさん
08/04/11 01:08:35
>>262
そんなコストパフォーマンスが悪いことやってるの、引きこもりくらいだろwww

265:デフォルトの名無しさん
08/04/11 01:23:15
被害妄想

266:デフォルトの名無しさん
08/04/11 01:45:39
バリバリのマクロ使いは質問者の2〜3行読んだだけで
何を意としているかはわかってるよ
わかった上で「それじゃよくわかんないよ」「もう少し具体的に」
それじゃこれか!
わざとずれた解答のマクロ出してくる
質問者は一気に信用する
質問者が自分で改編できないことは解答者はわかってるw
やがて改めて聞きに来るのはほぼ確実。
あとは「もう少しだから頑張ろう」とか適当に良きアドバイザーを装って
ネタぱくったら、さよならベイビーwww
解答者の計算どおりネタはぱくって答えは出さない

計算どおりにいきそうにないときは多数を装い
マナーだの常識だの礼儀だの罵倒する役柄と
優しさと知識を持ち合わせた解答者が入り混じる
少しくらい教えたところでこんなトコで質問してるレベルの奴に改編なんか無理。
質問者は解答してもらいたいのでペコペコしながら
最後は言われるがままw
偽解答者は初めからわかってるんだよ
とくにファイル操作関係は気をつけたほうがいい
VBAに限らず他の言語もね

267:デフォルトの名無しさん
08/04/11 01:54:22
病院行った方がいいよ

268:デフォルトの名無しさん
08/04/11 01:55:59
そちらからお先にどうぞ

269:デフォルトの名無しさん
08/04/11 02:02:19
なにこいつ

270:デフォルトの名無しさん
08/04/11 02:31:16
なんかすごい長文で不安煽ってるのがいるが安心しろ
オレがじゃんじゃん答えてやるから、そのままHTMLをうpれ

271:デフォルトの名無しさん
08/04/11 02:37:53
プッ
んじゃタグ抜きマクロでも書いてみ
リンク、object、span ヨロチクビ
それ見てから質問するか考えるわw

272:デフォルトの名無しさん
08/04/11 02:58:31
>>258
は、どう見てもパクるに値するネタでない事だけは確かw

273:デフォルトの名無しさん
08/04/11 03:09:59
どうみても金儲け絡んだ情報収集にみえますが
次のレスでは>phpで生成されたhtml
ピンポ〜ン!99%の確立で当たりましたね

274:デフォルトの名無しさん
08/04/11 10:58:32
頼むからコテつけてくれ。あぼんするから。

275:デフォルトの名無しさん
08/04/11 22:01:41 BE:378334793-2BP(380)
やっぱ Excel VBA で マルチスレッディングって 無理?

276:デフォルトの名無しさん
08/04/11 22:15:07
Excel 2003 のVBA の言語仕様書ってどこかにないでしょうか。

277:デフォルトの名無しさん
08/04/11 23:40:11
やるならマルチプロセスだなw

278:デフォルトの名無しさん
08/04/12 13:44:44
OS : windows XP
バージョン:excel 2002
VBAでのクラスモジュールの使い方がさっぱりわかりません。
コレクションの要素を設定/取得するだけのクラスすら作れません。
どこが間違っているのか&どう直せばいいのか、どなたか!m(_ _)m

'--クラスモジュール----Class1

Private a As Collection

Private Sub Class_Initialize()
Set a = New Collection
End Sub

Public Property Let mAdd(ByVal value As Integer)
a.Add (value)
End Property

Public Property Get mGet()
a.Item (a.Count)
End Property

279:デフォルトの名無しさん
08/04/12 13:45:27

'標準モジュール------
Sub test()

Dim i As Integer
Dim cal As Class1
Set cal = New Class1

'プロパティへの代入
For i = 1 To 3
cal.mAdd (i)
cal.mGet (i)
Next i
End Sub

280:278=279
08/04/12 14:10:33
自己解決しました
ものすごく恥ずかしい質問をしてしまいました><

281:デフォルトの名無しさん
08/04/12 16:53:54
>>277 kwsk

282:デフォルトの名無しさん
08/04/12 17:06:14
ActiveX EXE、アウトプロセスCOMサーバでぐぐれ

283:デフォルトの名無しさん
08/04/13 20:36:16
図形の線色を変更する為にソースの中に、
Selection.ShapeRange.Line.ForeColor.RGB = RGB(255,10,10)
と指定したのですが、

Line.ForeColor.RGBと指定するのは出来るけど良くないとの指摘を受けました。
VBやVBAの常識では、Selection.ShapeRange.Line.ForeColor.SchemeColor = 2
等とするらしいのですが・・・

RGBだとどのような弊害があるのでしょうか?

常識的な事を質問してすみません。
どなたかご教えて頂けませんか?(>_<)


284:デフォルトの名無しさん
08/04/14 00:06:12
なんで指摘した人に聞かないの?

285:デフォルトの名無しさん
08/04/14 00:25:53
>>284
ご指摘頂いたかたに何度か理由をお聞きしましたが、
常識なんだから当たり前と明確な裏付けを貰えなくて、
それで知人や本、ネットで調べても分からずじまいで、
ご質問させて頂きました(>_<)


286:デフォルトの名無しさん
08/04/14 03:22:55
Line.ForeColor.RGB使ってたときは左辺にどんな値を代入してたの?

287:デフォルトの名無しさん
08/04/14 03:29:49
あ、ごめん書いてたなwwww(ゲラプゲラオプスwww

たぶんあれだろ。RGB値だと何の色を指定してるかわからりずらいからだろ。
っつってもどっちもマジックナンバー状態だから(ry
っつーかつい最近はじめてVBAさわった俺からすると
コンパイラの方でこういう色の値は予約語としてもっとけと思ったな


288:デフォルトの名無しさん
08/04/14 03:56:11
それを答えるために詳しく聞いてたのかよ
なんだこいつ

289:デフォルトの名無しさん
08/04/14 07:31:44
わかりづらいなら定数定義すりゃいいだけだしよくわからんな

290:デフォルトの名無しさん
08/04/14 20:01:59
>288-289
全然俺の言いたいことを理解してないな。
さすがVBAしかさわったことのないゴミどもだwwwwwwwww
ちょろっと触った感じ、他のコンパイラと比べて
半端なく使いづらいからVBAそのものが昔から進化してねぇんだろうな。
まぁお前等のレベルもそこで停滞してるのもしゃあねぇわなwwww

291:デフォルトの名無しさん
08/04/14 20:58:09
VBAを学ぶのにオススメの書籍を紹介してください.
VBAは全く初めてですが,C,fortranならそこそこ使えます.
よろしくお願いします.

292:デフォルトの名無しさん
08/04/14 21:43:08
マクロを記録して生成されたソースを見るのが一番参考になる

293:デフォルトの名無しさん
08/04/14 21:49:00
なるほどwww

294:デフォルトの名無しさん
08/04/14 22:29:42
今日は釣果がいまいちですね

295:デフォルトの名無しさん
08/04/14 23:08:49
Application.quit
ThisWorkbook.close savechange=false

でExcelを終了させているのですが、
5回に1回くらいプロセスが残ることがあります。
GUIは消えてるのですが・・
Excel2003です。



296:デフォルトの名無しさん
08/04/14 23:20:38
未解放のリソースが残ってるんじゃねーのか?

297:デフォルトの名無しさん
08/04/14 23:28:10
>>296
特に無いと思います・・
DBとか使って無いし
ファイル出力はそのたびクローズしてるんで。

そもそも、リソース未開放だとプロセス残るんですか?


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

4266日前に更新/248 KB
担当:undef