[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 09:57 / Filesize : 123 KB / Number-of Response : 389
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

●EXCEL・VBAの教えてスレ Part2●



1 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 11:14:15 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

OOoのCalcの質問もOKです

前スレ
pc10.2ch.net/test/read.cgi/tech/1054356121/


261 名前:258 mailto:sage [2007/02/15(木) 00:59:28 ]
>>259
それも試しにやってみたのですが、色が変わらないので間違っているのかと。

ちなみにユーザー定義関数内でやろうとしていて以下のようにしてもoutputはでますが、
色が出ないんです。指定がおかしいのでしょうか?

Function color(work)

ActiveCell.Interior.ColorIndex = 36

color = "color" & work

End Function


262 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:18:30 ]
>>261
普通にできてしまったのですが…。

Function test()
ActiveCell.Interior.ColorIndex = 36
End Function

同じですよね、多分?

263 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:25:42 ]
>>262
たびたびすみません。同じだと思うのですが・・・。

やろうとしていることは、
・ユーザー定義関数を作ろうとしていて(ここでいうcolorという関数)
・計算結果がある値をとればセルの色を変える
というもので、上述のcolorという関数はそれをおもいっきり簡略化したものです。

やっぱり上手くいかないです・・・
もしかして根本的にわたしが勘違いしているのかもしれません。ユーザー定義関数とマクロは別物ということでしょうか?

264 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:27:47 ]
263補足

>>262さんのを登録後、エクセル上で=test()と任意のセルに入力しても
ゼロと表示されるだけで色は変わりませんでした・・・

265 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:29:16 ]
引数のworkには何が入る予定なの?

266 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:30:49 ]
あー、分かった。
セルでセル関数のようにはマクロのユーザー関数は使えないよ。
ツールメニュー→マクロ→color(自分で作ったユーザ関数)を選らんで、
その時点で使うわけ。

267 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:30:54 ]
>>265
ただの文字列です。

268 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:34:30 ]
「セルの計算結果」って言ってるのは、
=SUM(R[-3]C:R[-1]C) ←こういう奴の話を言ってるんだよね?
で、このイコールのところに自分で作った関数を入れたいってことよね?
結論から言えば、できないんじゃないかなあ。

269 名前:268 mailto:sage [2007/02/15(木) 01:37:15 ]
ごめん!
ウソ言ってた。
できたよ。




270 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:37:24 ]
>>261
> ユーザー定義関数内でやろうとしていて
先に書けよ。

ユーザー定義関数ってのは引数を計算して、式を入れたセルに値を返す物で
書式設定だのなんだのというシート上の操作を行うものじゃないぞ。
だからアクティブセルを取得することは出来るが操作は出来ない。それがユーザー定義関数ってものだ。
指定がおかしいんじゃなくて、やろうとしている事に対してユーザー定義関数を使おうとしているのがおかしい。
取得が出来てることはDebug.Print ActiveCell.Address(0, 0)を入れればわかるだろう。
操作がしたいならイベントを使え。

271 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:38:10 ]
www.relief.jp/itnote/archives/001873.php

272 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:48:01 ]
>>268
そういうやつですね。
文字列の長さからいろいろと計算させる予定でした。
結果的にダメっぽいですね。
いろいろとありがとうございました。

>>270
イベントでやるしかないのですね。
>それがユーザー定義関数ってものだ。
名言の匂いがしますね。使わせて頂きます。

>>271
参考になりました。


273 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:48:02 ]
265+266+268+269
あとはがんばって〜。寝るわ。

274 名前:デフォルトの名無しさん [2007/02/15(木) 03:47:04 ]
Const a = 1
Const b = 2
Const c = 3
Sub main()
a1 = 1
b1 = 1
c1 = 1
cells_a = 0
cells_b = 0
cells_c = 0
Do While cells(a1, a).Text <> ""
a1 = a1 + 1
cells_a = cells_a + 1
Loop
Do While cells(b1, b).Text <> ""
b1 = b1 + 1
cells_b = cells_b + 1
Loop
Do While cells(c1, c).Text <> ""
c1 = c1 + 1
cells_c = cells_c + 1
Loop
cells(1, 5).Value = cells_a
cells(2, 5).Value = cells_b
cells(3, 5).Value = cells_c
End Sub

このプログラムを短くできませんか?

275 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 04:39:47 ]
配列使うと1/3近くには出来るかも知れないが
速度は落ちるんじゃないかな

276 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 10:09:42 ]
>>274
Const a = 1
Const b = 2
Const c = 3
Sub main()
a1 = 1:b1 = 1:c1 = 1

With Application.WorksheetFunction
cells(1, 5).Value = .Count(Range(Cells(a1,a),Cells(a1,a).End(xlDown)))
cells(2, 5).Value = .count(Range(Cells(b1,b),Cells(b1,b).End(xlDown)))
cells(3, 5).Value = .count(Range(Cells(c1,c),Cells(c1,c).End(xlDown)))
End With
End Sub

試してないけど、とかじゃダメなのか?



277 名前:256 mailto:sage [2007/02/15(木) 10:51:13 ]
>>257
お答えありがとうございます。説明不足ですみませんでした。
御推察のとおり、1つ目のセルは表示されずに2つ目が表示されてしまっていました。
で、>>257様の誤解を参考にして色々試したのですが、どうにもうまくいきません。
もう少しだけヒント頂けないでしょうか?

278 名前:sage [2007/02/15(木) 13:13:37 ]
>>277
何を試してどうだめだったのか書かないと…

とりあえず自分の環境では普通に動く

フォームを表示したときに表示したければ
UserForm_Activaue()内で
Callしてみれば?

とりあえず、F8でステップインしながら
動きを確認してみることをお勧めするよ
後はDebug.Printするとか。

ローカルウィンドウで
変数に期待通りの値が
はいってるか確認する方法もあるし。

なんにしても情報が少なすぎだと思いますよ

279 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 13:18:21 ]
うはぁ
あげちった…

携帯からレスするもんじゃないな…



280 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:18:22 ]
他人事ながら

×UserForm_Activaue()
○UserForm_Activate()

横レス失礼

281 名前:256 mailto:sage [2007/02/15(木) 16:06:37 ]
>>278,>>280
またまた説明足らずで申し訳ありませんでした。
で、ご指摘の方法でちゃんと出来ました!
自分の持ってるVBAの本が初心者用のものだったため、
UserForm_Active()とか全然載ってなくて方法が分かりませんでした。
今回はどうもありがとうございました!


282 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 16:27:59 ]
VBに高階関数とかってないの?関数に関数を引数として渡したいだけなんだけど。

283 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 16:49:21 ]
>>282
AddressOf

284 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 19:07:28 ]
>>283
おお、サンクス

285 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 19:31:06 ]
ダイアログボックスで入力された年・月にしたがってカレンダーを表示するマクロを作っています。
年・月は文字列として取得、それを日付型にデータ変換して日付型の変数に代入しているのですが、
そこで「実行時エラー'11': 0で除算しました。」とのエラーが出ます。
DateValue関数を使う、日付型の変数を Variant型に変える、を試してみましたが、
結果は同じでした。
文字型の変数を Variant型に変えると、最初に1回エラーが出たあとその後は出なくなりましたが、
カレンダー表示の処理のところで日付を誤認してしまいます。
現在は On Error Resume Next でエラーを抑制して動かしており、
本来の目的であるカレンダー表示はそれで問題なくできておりますが、
可能であればエラー自体出ないようにしたいと思っています。
どこが悪いのかアドバイスをお願いします。

テストコード
Sub test()
Dim strInput As String
Dim datDay As Date
strInput = InputBox("年と月を入力してください。(例)「2007 2」")
datDay = CDate(strInput)
MsgBox datDay
End Sub

環境
Mac OS X 10.4.8
Excel 2004 for Mac ver. 11.3(060914)

以上よろしくお願いします。

286 名前:デフォルトの名無しさん [2007/02/15(木) 20:46:35 ]
VBAのソースで右側に長くなって見づら苦なってきたのでソースの内容はそのままで改行することってできませんか?
普通に改行するとエラーが出てしまいます。

287 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 21:01:35 ]
MsgBox _
 "VBAのソースで右側に長くなって" & vbCrLf & _
 "見づら苦なってきたので" & vbCrLf & _
 "ソースの内容はそのままで" & vbCrLf & _
 "改行することってできませんか?" & vbCrLf & _
 vbCrLf & _
 "普通に改行するとエラーが出てしまいます。"

288 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 21:30:38 ]
>>287
Chr(10)じゃだめ?

289 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 21:51:40 ]
>>285
テストコードが問題なく実行できてしまったのですが…。
カレンダーに変換してるところのエラーでは?



290 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:43:59 ]
たぶんロケール絡みだろう。
同じバージョンのWindows&Excelだって、ロケールが違うとCDateやIsDateの動作が変わってくるからな。
とりあえずInputBoxとCDateの間に
If strInput = "" Then MsgBox "空文字 or キャンセル": Exit Sub
If Not IsDate(strInput) Then MsgBox "日付変換不可": Exit Sub
って入れてみな。「2007 2」で"日付変換不可"が出るようなら、ロケールの問題でビンゴだ。
その場合は文字列切り出しで年と月を取得しよう。
"日付変換不可"が出ないにしても、文字列切り出しで解決出来るならそれでいいし。

291 名前:286 [2007/02/16(金) 00:53:59 ]
_←これだけで改行できた思い出させてくれてありがとう

292 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 01:11:48 ]
ListBoxに値をいれるとClickやChangeが発生しますが、
クリック中に値を変更したい場合とかどうしてますか?

フラグもって立ってたら処理しないというやり方で回避してるんだけど
なにかほかにいい方法がありますでしょうかね。

293 名前:285 mailto:sage [2007/02/16(金) 01:38:32 ]
>>289, 290
レスをいただきありがとうございます。
テストコードのほうですが、>>290さんのコードを加えて実行してみたところ、
1回目は「実行が終了しました」とのエラーメッセージが表示され、
2回目は「オーバーフローしました」とのエラーメッセージが表示され、
3回目以降は「2007.2.1」と普通に表示されました。
念のため本来のマクロを On Error Resume Next をコメントアウトして再度実行してみたところ、
1回目は「オーバーフローしました」とのエラーメッセージが表示され、
2回目も「オーバーフローしました」とのエラーメッセージが表示され、
3回目は正常にマクロが実行され、
4回目で「0で除算しました」とのエラーメッセージが表示されました…
こちらに書き込む前に何回もテストし、そのときは「0で除算しました」というエラーメッセージのみ
繰り返し出ていたのですが、実行のタイミングによってまるで結果が違ってきているようでもあり、
とまどっています。
>>290さんのおっしゃっている「文字列切り出し」という方法は、文字列から年と月をそれぞれ別々に取得する
ということですね?
がんばってコードを書いて試してみます。
どうもありがとうございました。

294 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 10:37:50 ]
a = Int(9 * Rnd + 1)
b = Int(9 * Rnd + 1)
c = a + b

これでcの中にaの中に7 bの中に8 が入ってるとして 15じゃなく 78と表示することはできますか?

295 名前:デフォルトの名無しさん [2007/02/16(金) 11:59:19 ]
>>294
つなげたいなら、&


296 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 12:20:14 ]
ちょwwVB以前の問題だろw
a*10+bも思いつかんのか

297 名前:デフォルトの名無しさん [2007/02/16(金) 22:23:14 ]
初歩的な質問でホントにすいません;

エクセルのシート上にファイル等から画像を挿入したとします。

その画像を文字列の背面に持っていく方法がわかりません;

背景に設定する等とは違います;
(ちなみに背景も小さい画像で設定すると
ビッチリ並んで出てきますが、好きな場所に1個だけ、
とかは出来るんでしょうか?)

よろしくお願いします;

298 名前:デフォルトの名無しさん [2007/02/16(金) 22:25:14 ]
すいません;スレ違いでした;

299 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 12:04:32 ]
100行まで三行間隔で文字列が入っていて間違って打ってないか確認したいです。

B列、100行までの間の3の倍数のセルに"もげ"って入っていたら次の3の倍数のセルへ
間違っているか、空欄だったらセルを選択した状態で終えてください。
という処理をしたいのですが
相対セルと三の倍数選択する部分の表現でつまづいてしまいました。

一つずつチェックしてこなすにも5000行以上で当て上げ状態です
どなたかヒントかVBAのソースを教えていただけないでしょうか
よろしくおねがいします




300 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 12:13:16 ]
当て上げ?
で、そのチェックはVBAでやるようなことなのか?

301 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 12:54:44 ]
B列を削除して割り振りなおした方が簡単じゃないの?

302 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 12:55:01 ]
> ソースを教えていただけないでしょうか
ソースが欲しいならそういうところに頼めよ
ここは丸投げ依頼所じゃないぜ
自分で書こうって気がある奴がヒントを貰いに来る場だ

303 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 12:57:28 ]
step 3 じゃだめ?

304 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 13:19:21 ]
>>299
100行まで?

Sub moge()
  Dim i As Integer
  For i = 3 To 100 Step 3
    If Cells(i, 2).Value = "" Then
      MsgBox "B" & i & "は空白ですよ。"
    ElseIf Cells(i, 2).Value <> "もげ" Then
      MsgBox "B" & i & "に「もげ」でない文字が入っています。"
    End If
  Next i
End Sub

305 名前:デフォルトの名無しさん [2007/02/18(日) 13:41:13 ]
dim giy as integer

a=4937870
b=1.05
s=387
u=100

giy = WorksheetFunction.RoundDown(((a * b) / (s*u)), -1)


上のを実行するとなんでかオーバーフローするんですけど。

306 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 13:47:01 ]
しませんでしたけど…
念のためLongにしといたらどーですか?

307 名前:299 mailto:sage [2007/02/18(日) 13:51:43 ]
>>304
まさにこれです
変数とかCellsとかforとかすごい勉強なります。
ありがとうございます

>>303 
最初なんのことだろうと思いましたが、304みてわかりました。step 3。
ありがとうございます。


308 名前:デフォルトの名無しさん [2007/02/18(日) 13:56:43 ]
デバッグしてa*bのところにマウスをもってくると、5184763.26454401
という数字が出ます。小数点以下の数字が原因かと思うんですけど。

309 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:11:26 ]
>>308
それのどこがオーバフロー?



310 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:14:16 ]
もしかして:
単精度で計算していて精度がでていないという落ち?

311 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:25:55 ]
aとbがVariantならdoubleと同じ精度で扱えると思うんだが…

312 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 21:49:04 ]
フォームのテキストボックスを全部いっぺんに空白にする方法はありますか?

313 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 22:40:09 ]
>>312
順番に空白にすればよい

314 名前:312 mailto:sage [2007/02/18(日) 22:44:54 ]
いや、そりゃもちろんそうなんですが、
一行で一気に全部いっぺんに空白にしてしまうような命令とかはないかなぁと思いまして・・・

315 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 22:55:43 ]
>>314
そんなことしてどーするの?
見た目には変わらないのに?

316 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 23:10:11 ]
Me.Controlsに対してFor Eachループ回して
If TypeName(objControl) = "TextBox" Then objControl.Text = ""
とか

317 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 23:29:42 ]
そういう処理をするプロシージャを用意しておいて、そいつを呼べばいい。

318 名前:312 mailto:sage [2007/02/19(月) 10:43:01 ]
>>315
自分の作成したフォームのテキストボックスが20個くらいありまして、
それをクリアするのにプログラムが長くなってしまうので
短く簡単にすませる方法はないかなぁと思いまして。
>>316、317
ありがとうございます。それで試してみます!

319 名前:デフォルトの名無しさん [2007/02/20(火) 00:41:14 ]
EXCELで

コマンドボタンをクリックすると、Sheet3のA1:A10の内容を、Sheet1のA1:A10にコピーする

こんなモノを作りたいのですが


Private Sub CommandButton1_Click()
Range("A1:A10").Select
Selection.Copy
Sheets("Sheet1").Select
Range("A1:A10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

こうすると、「Range クラスの Select メソッドが失敗しました」となってしまいます
どうすればいいか教えて下さい

「マクロの記録」を使ってしか、マクロ扱った事無いのに
調子に乗って仕事請けてしまって困ってます・・・



320 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 00:58:33 ]
>>319
これだけでいいんでない?

Private Sub CommandButton1_Click()
  Worksheets("Sheet3").Range("A1:A10").Copy
  Worksheets("Sheet1").Range("A1:A10").PasteSpecial Paste:=xlPasteValues
End Sub

最後に
Worksheets("Sheet1").Activate
にしてもいいと思うけど…

321 名前:319 mailto:sage [2007/02/20(火) 01:15:25 ]
解決しました有難うございます

範囲指定の時は

Worksheets("Sheet3").Range("A1:A10")

としなければいけないのですね


322 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 01:18:36 ]
>>321
シート名を指定していないのでSelectが失敗したのではないでしょうか?
範囲指定とは関係ないです。
そういや
Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues
でOKでもOKでした。

323 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 01:40:09 ]
どうでもいいけど、
シート名変更されると危なっかしいから、
シートのオブジェクト名でやった方が無難。
Sheet1.Range〜以下略
意味が分からんならVBA画面でシートを選択してF4押せ。

324 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 01:50:00 ]
ユーザーがSHIFT+クリックで複数のセルを選択するように
プログラム上で選択中のセルをさらに動的に増やしたいのですが
どうすればいいでしょうか。

325 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 01:51:53 ]
どういう風に増やしたいのか詳しく。
Offsetとかでいいならそれで。

326 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 02:12:18 ]
OffsetではなくResizeの方が良いのでは?

327 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 03:12:28 ]
飛び地で選択できるじゃないですか?
あんな感じで。

2点間を選択してもらって、その間の特定キーワードを含む
セルを自動的に選択する機能を作りたいのですよ。



328 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 07:49:42 ]
>>327
マクロの記録でctrlキーを押しながら
A1とA3を選択。
これで、離れたセルの指定方法は分かるだろ?

後は、定範囲内をFor Eachとかでまわして
該当セルのaddressとるなりして
同じように選択するだけ。

329 名前:デフォルトの名無しさん [2007/02/20(火) 11:06:07 ]
Type MyTestType
ID As Integer
Name As String
End Type

Sub test()
Dim a(3) As MyTestType
'中略
i = TypeTest(a)
End Sub

Function TypeTest(a As Variant) As Integer
'省略
End Function

とコードを組むと、コンパイルエラーが出ます。
Functionの引数の型宣言で、配列を使うこともできませんが、
どのようにしたら、aをFunctionに渡すことができるでしょうか?

よろしくお願いします。



330 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 11:24:55 ]
VBAでどうやってコンパイルエラーを出したのか知りたいのだが。

331 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 11:39:42 ]
>>329
クラスを使え


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

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

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

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

333 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 12:16:50 ]
>>332
===== MyTestClass As クラスモジュール =====
Public ID As Integer
Public Name As String
===== EOM =====

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

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

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

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

334 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 13:40:38 ]
>>333
どうもです。

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

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

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

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

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

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

339 名前:338 [2007/02/22(木) 18:01:47 ]
処理重くなるだけかな
少しぐらい重なってもいいか・・・・



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

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

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

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

343 名前:デフォルトの名無しさん [2007/02/23(金) 22:52:10 ]
>>342
ありがとう!!!
できた〜!!!!!

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

ほんとにありがとう。

344 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:15:34 ]
ああ、"1.0"にしないと駄目だろうねw


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

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

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

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

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

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

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

346 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 01:33:32 ]
うん、わかる

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

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

349 名前:デフォルトの名無しさん [2007/02/24(土) 15:09:31 ]
'初心者です。


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

'だと動くのに

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

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




350 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:37:02 ]
range("1:" & あ)では?

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

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

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

353 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 16:05:06 ]
>>351
あ、RowsのつもりがRangeって打っちゃったよ

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

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

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

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

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

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

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



360 名前:デフォルトの名無しさん [2007/02/25(日) 14:25:00 ]
あぁ〜ん、ユーザーフォームがうまく作れないよぉ〜〜〜ん!!

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

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

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

363 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:30:50 ]
>>361
kwsk

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

365 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:33:26 ]
>>364
UserForm_QueryCloseイベントに上書き保存のコードを書く


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

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

>>366
なら分かる

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

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



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

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

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

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

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

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

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

375 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:27:35 ]
>>374
Len

文字変数の長さって何?

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

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


377 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:46:05 ]
>>376
答え書いてあるやん

378 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:55:51 ]
b = Len( a )

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

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

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



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

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

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

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

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

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

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

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


385 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:27:54 ]
URL="http:xxx.com/&page=" & 1 & "&main="
URL="http:xxx.com/&page=" & page & "&main="


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

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

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

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

例)

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

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

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

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

また翌日・・・

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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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