Excel VBA質問スレ Pa ..
[2ch|▼Menu]
340:デフォルトの名無しさん
09/08/04 06:17:42
>>336
それだけの情報だとApplication.Volatile使えとしかいえない。

>>338
VB言語でVBプロジェクトを弄る方法は、表計算(Excel)とは関係ないので
>>339の方法がお気に召さないならそれ以上はスレ違いって話になる

しかし、あるブックの複数シートで同一イベントを起こしたい場合
シートモジュールでのWorksheet_Changeの変わりに
ブックモジュールでWorkbook_SheetChange使えば良いだけの話だがな

341:デフォルトの名無しさん
09/08/04 08:57:24
はぁ?
VBEこそ、もろこのスレ向きの話題だろうが

342:デフォルトの名無しさん
09/08/04 09:03:08
>341

ハァ?
(゚Д゚)y─┛~~ 

343:デフォルトの名無しさん
09/08/04 09:56:25
Microsoft Visual Basic for Applications Extensibilityを参照してImportで一括インポート
Application.VBE.を使用して挿入

好きなほうをどうぞ

344:デフォルトの名無しさん
09/08/04 13:47:39
>>336
なんでCOUNTIFがあるのに自作するのか分らんが、関数の参照してるセルはきちんと引数に入れてるのか?
一部の揮発性関数をのぞいて、基本的に関数は引数が変化したときだけ自動では再計算する。
=COUNTIF(A1:A10,C1)ならA1:A10のいずれかのセル、またはC1が変更されたときだけだ。
だから自分で関数を作るときも範囲と検査値の二つの引数を入れるように作らないと駄目だ。
Application.Volatileで逃げるのは間違った解決策だから気をつけろ。

345:デフォルトの名無しさん
09/08/04 15:25:14
URLをページタイトルに置換するスクリプトなのですが動作が不安定です。
どこを修正したらよいでしょうか。どなたご教授お願いします。

Sub GetWebPageTitle()

Dim objIE As Object
Dim lngLastRow As Long
Dim i As Long
Dim strURL As String
On Error GoTo ErrHandler

'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.Application")

'最終行取得
lngLastRow = Me.Range("A65536").End(xlUp).Row

For i = 1 To lngLastRow
strURL = Me.Cells(i, "A").Value
objIE.Navigate strURL
'表示完了まで待つ
Do While objIE.Busy = True And objIE.ReadyState <> 4
DoEvents
Loop
Me.Cells(i, "B").Value = objIE.Document.Title
Next i
objIE.Quit
MsgBox "タイトル取得完了"

Finally:

346:デフォルトの名無しさん
09/08/04 15:25:55
>>345の続き

Set objIE = Nothing
Exit Sub

ErrHandler:
With Err
MsgBox .Number & vbCrLf & .Description, vbCritical
End With
Resume Finally

End Sub

347:デフォルトの名無しさん
09/08/04 15:46:44
あ、そっかFalseにするんだ。
自己解決しました。
すみません。

348:338
09/08/04 19:41:57
>>339-343

ありがとうございます。
インポートは、シートでなくmodule にくっついてしまいだめでした。
教えていただいた方法を順に試してみたいと思います。

excel のvbaしかやったこと無いので、イベントをしらべだしてから
VBEなどがあるのを最近知った初心者です。

349:デフォルトの名無しさん
09/08/04 19:55:33
            , -'"´  ̄`丶、_
           ,.∩         `ヽ
         〃∪'´ ̄`二二人\  ヽ
         | ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ',
         |ハ ,ニ、   ,. - 、 | | | l |
         | ハ ィハ     ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、
         | | | じ'   |トJ〉  /)} l | 違う板にコピペすると鬼のような怖い顔
         | ハ  、'_,   ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。
         l l /\    .. イV\川 |
         ,' l l ,イ `l ̄´ /   /ヽl l
         l | l ハ  `メ、    〃  ヽヽ、__ノ
         l  ∨ └‐イ「ト--ァ'´     ハヽ__ノ
         ヽ/  }  l」」 /     / }`ー
          〈_n| 八   / /     /ノ
          〈二二人 c /\/ / , イ
           /  /厂 /\__>< {_


350:336
09/08/04 20:03:33
Excelのセキュリティの設定で常にマクロを有効にするか
確認するように変更したら自動計算されました。

>>344
複数の検索値でクロス集計するようにしています。
確かに範囲と検索値を引数に入れるようにしたほうがいいですね。
ありがとうございます。

351:デフォルトの名無しさん
09/08/05 07:54:36
まさかピボットテーブルでやった方が簡単なことを関数、しかも自作の関数でやってるんジャマイカ?

352:デフォルトの名無しさん
09/08/05 15:52:18
セルをビットに見立てて、エクセルで扱えないデータを格納・演算出来ることに気が付いたんだけど


そもそも使わないんだよな……無意味なことをした

353:デフォルトの名無しさん
09/08/06 08:26:34
テンプレの使うということに順していないので、スレ違いな質問だったらすいません。

今、XPのExcel2003のVBAの勉強をして二日目です。(プログラム経験などは一切なし)
参考にしているのは下記アドレスのページで第6章の途中まで進めました。
URLリンク(excelvba.pc-users.net)
他にも勉強するのにいいサイトがありましたらご教示お願いできないでしょうか?
個人的には動的? なツールのような使い方(任意の桁や条件の数字だけを抽出のような感じです)や
共通作業のソフト化(今は仕事でExcelを使うことはないですが…)を出来るようになるのが理想です。

354:デフォルトの名無しさん
09/08/06 12:43:01
そういうことがやりたいならVBAではなくVBの勉強した方がいいね

しかし、サイト紹介もVBの話もスレ違いだから自分で探しな
VBA分野で具体的な質問が有ったらまたおいで

355:デフォルトの名無しさん
09/08/06 22:15:56
抽出結果をExcelに出力するならVBAでいいよ。

356:デフォルトの名無しさん
09/08/06 22:19:36
>>57

Open "ABC" & Str(i) & ".txt"

とした方がいいのでは?

357:デフォルトの名無しさん
09/08/06 22:54:33
>>353
何で最近のゆとりは本買わないんだ。
本買え本。
しょーもないサイトを探し回る時間の損失に比べたら、2,3冊の本代なんて安いもんだ。

358:デフォルトの名無しさん
09/08/07 00:42:24
保護をかけた状態でロックを外したセルへの移動が
一部出来なくなってしまいました。
→と←の移動は効くんですが、↑と↓の移動を受け付けてくれません。
ScrollLockやロック外し忘れでは無いと思います。
あと、セルをクリックするとセルの周りに太枠が出るじゃないですか?
あれも時々出なくなりました。
この現象が起こるのは今の所1つのブックだけです。

調べてみたんですが、何が原因かさっぱりわかりません。

359:デフォルトの名無しさん
09/08/07 00:44:05
途中で送信してしまったorz
原因分かる人いたら教えて下さい。

360:デフォルトの名無しさん
09/08/07 06:36:21
レスありがとうございます。

>>354-355
もし仮に目的がVBでないと難しいことが分かっても、VBAで覚えたことは使えると思うので
とりあえずこのままVBAを学んでみようと思います。

>>357
確かにそうですね。
今日にでも書店でよさげな本を探してみます。

361:デフォルトの名無しさん
09/08/08 22:16:53
ここで本とかを買った人って、何の本買ったのか気になる。
俺は、よく分かるプログラミングVBA 基礎・関数・応用
(大村あつし)の奴を3冊買ったんだけど。

362:デフォルトの名無しさん
09/08/08 23:49:18
>>338
シートにイベントマクロをセットする方法がわかりましたのでご参考までに。
みなさまありがとうございました。

セットするマクロ
'チャートシート cost に mouseupイベントをセットする例
Sub mouseup_set()
Dim i As Long
With ActiveWorkbook.VBProject
For i = 1 To .VBComponents.Count
If Mid(.VBComponents(i).Name, 1, 5) = "Graph" Then
If .VBComponents(i).Properties("Name") = "cost" Then
.VBComponents(i).CodeModule.AddFromFile "D:\vbadir\mouseup.bas"
Exit For
End If
End If
Next i
End With
End Sub

'mouseup.bas の内容
Private Sub Chart_MouseUp(ByVal Button As Long, _
ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElemID As Long, Arg1 As Long, Arg2 As Long
' ここにMouseUp時の処理記述
End Sub

以上

363:デフォルトの名無しさん
09/08/08 23:50:19
>>362
忘れた、追記
windows XP, excel2007 です。

364:デフォルトの名無しさん
09/08/09 00:02:16
>>362
私本管理のDB見たら、Excel関連だけで\30kは使ってた
OS関係やプログラム全般と合わせたら軽く\100kは超えてる
俺プログラマでも何でもない文系人間なのにww

365:デフォルトの名無しさん
09/08/09 00:27:30
aが0.01、bが0.01の状態で、
b=b+a
としてセルに代入すると
0.010.01となってしまいます
何がいけないんでしょうか

366:デフォルトの名無しさん
09/08/09 01:12:55
>>365
a、bが文字列になってる
数値に変換を

367:デフォルトの名無しさん
09/08/09 08:18:40
>>361
大村あつしの本は、知識0の人になら僅かな足しにはなるが
他と比べて有用といえる物では無いな

368:デフォルトの名無しさん
09/08/09 11:35:42
sheet1上でマクロを使ってて、sheet2の中の値を取ってくるとき、
わざわざsheet2をアクティベートしてまた戻す、という方法じゃないとだめ?
住所みたいにsheet2;cells(3,3)みたく指定できませんか?

369:デフォルトの名無しさん
09/08/09 11:46:33
セルの値ならmacro4.0うんたらかんたら

370:デフォルトの名無しさん
09/08/09 11:46:50
>>368
Function GetCell(WS As String, row As Long, col As Long) As Variant
 GetCell = Worksheets(WS).Cells(row, col).Value
End Function

とかじゃだめなの?


371:デフォルトの名無しさん
09/08/09 11:52:52
>>370
ふむふむ。自作関数使ったことないんですが、やってみます!

それから、論理記号の∃(存在)って、for-next文で代替するしかないんでしょうか?

たとえば、
If A1からA10の間に100以上の値があれば
Then
みたいに使いたいんですが


372:デフォルトの名無しさん
09/08/09 11:56:16
>>361
パーフェクトマスターとかいうでかい本一冊買ったくらいかなぁ

ただ、本分厚すぎて面倒なんで、基本的にExcel内のヘルプに頼ってる。

373:デフォルトの名無しさん
09/08/09 12:34:08
>>368
> 住所みたいにsheet2;cells(3,3)みたく指定できませんか?
sheet2.cells(3,3)ではあかんの?

>>371はforで代用が一般的だと思う
ワークシート関数のMAXとかで一発で済ませてもいいし

374:デフォルトの名無しさん
09/08/09 13:13:44
max(Sheet2.Cells(s, 4) : sheet2.Cells(s+e,4))
でやったらエラーでした。
cellsで範囲指定するのはどうやるんでしょか?


375:デフォルトの名無しさん
09/08/09 13:16:11
どこまで続けるんだよ
もういいだろ

376:デフォルトの名無しさん
09/08/09 13:19:20
>>374
セル範囲の指定はRange
worksheetfunction.max(Range(Sheet2.Cells(s, 4),sheet2.Cells(s+e,4)))

377:デフォルトの名無しさん
09/08/09 13:20:50
ありがとうございました。
助かりました。
たぶん10分後にまた何か質問します。


378:デフォルトの名無しさん
09/08/09 13:23:27
少しは自分で考えろw


379:デフォルトの名無しさん
09/08/09 13:30:36
セルの指定もできずになぜここに来るかとも思うけれど
他に適当なスレもないしスレ違いすぎってこともないから
まあ夏休み中はこんな流れでもいいんでない?
なぜなに質問コーナーみたいなかんじで

380:デフォルトの名無しさん
09/08/09 13:34:30
a=inputbox("繰り返しの数")
for x=0 to a
next x

とするとfor文が無視されるんですが、変数をtoの後に持ってくることはできないんでしょうか?


381:デフォルトの名無しさん
09/08/09 13:39:22
>>380
できるよ
aに1以上の数がはいってれば無視されないはず

382:デフォルトの名無しさん
09/08/09 13:41:27
a=inputbox("繰り返しの数")
for x=0 to a
msgbox x
next x

でやってみ?無視されてないから。

383:デフォルトの名無しさん
09/08/09 13:56:44
a=inputbox("繰り返しの数")
for x=0 to a
sheet1.cells(2,2).value=w
next x

にしても無反応なのであった;;
別の場所に問題あるのかな。


384:デフォルトの名無しさん
09/08/09 13:57:35
wじゃない、xでした

385:デフォルトの名無しさん
09/08/09 14:03:39
もしかして・・・別のsub ... end sub の中でおこなったinputboxの値は有効じゃない!?

386:デフォルトの名無しさん
09/08/09 14:06:25
やべぇ自分で気づいた俺天才!

387:デフォルトの名無しさん
09/08/09 14:07:07
>>385
アホwそれを先に言え

388:デフォルトの名無しさん
09/08/09 14:13:33
すげえことにきがついた・・・
サブを呼び出すときに変数?に戻る数を入れてやればいいんじゃね・・・?

389:デフォルトの名無しさん
09/08/09 19:54:04
先読み回答しとくと、staticでググレ。

390:デフォルトの名無しさん
09/08/09 20:34:23
>>389
そのレスを>>380の段階で付けられるようになれば神なんだろうなー
俺にはまだまだ無理だ

391:デフォルトの名無しさん
09/08/09 22:24:52
で、forが実行されないってのは何よ
シートで見たいなら
for x=0 to a
cells(x.1)=x
next
とか書かないとわからないぞ

392:デフォルトの名無しさん
09/08/09 23:50:59
forが実行されないのは

a<0

だからだと思う

例えばaがstring型だとか

393:デフォルトの名無しさん
09/08/10 00:46:24
VBAで作成したCSVファイルを富士通系汎用機(EBCDIC)に送信する
ということをやりたいのですが、
日本語全角文字を認識させるために、シフトイン、シフトアウト
というコードを全角文字の前後に付与する必要があるらしいのです。
このシフトイン、シフトアウトをVBAでファイルに書き出すことは
できるのでしょうか?

シフトイン、シフトアウトは、16進数で28H,29Hという記述は見つけたのですが
よくわかりません。

知ってる方いらっしゃいませんか? m−O−m
WindowsXP、EXCELは2003です。

394:デフォルトの名無しさん
09/08/10 00:52:21
全角絵文字がキモイ

395:デフォルトの名無しさん
09/08/10 02:25:59
それより日本語全角文字の文字コード分ってるのか?

396:デフォルトの名無しさん
09/08/10 06:42:15
ASCIIだろ

397:デフォルトの名無しさん
09/08/10 07:26:32
まずは、富士通汎用機のCSVファイルを
windowsのエディタで開くところから始めるだろjk

398:デフォルトの名無しさん
09/08/10 08:20:34
コードを出力すること自体は簡単だけど
どういう形式で出力すればいいのか質問者がわかってないと答えようがないわな
そもそも16進のままどっかに書いとけばいいものなら回答の必要もないだろうし

399:デフォルトの名無しさん
09/08/10 11:29:42
>>395-398
ド素人は黙っとけ

400:デフォルトの名無しさん
09/08/10 11:38:20
そもそもスレ違いじゃないか?

401:デフォルトの名無しさん
09/08/10 15:00:07
バイナリデータをVBAで書きだせるかどうかについては、スレ違いじゃない。
んで、「ebcdic vba」でググってみたら、こんなページがヒットしたわけだが。

ASCII 文字コードと EBCDIC 文字コードとの変換方法
URLリンク(support.microsoft.com)

402:デフォルトの名無しさん
09/08/10 16:13:03
それじゃ日本語全角文字が変換できねーだろ

403:デフォルトの名無しさん
09/08/10 16:29:22
シフトイン
.Write "("
シフトアウト
.Write ")"

404:デフォルトの名無しさん
09/08/10 18:19:15
> バイナリデータをVBAで書きだせるかどうかについては、スレ違いじゃない。
残念、ハズレ

VBスレならスレ違いじゃないが
『"E x c e l" VBA』スレでは、残念ながらスレ違い(>>1参照)

405:デフォルトの名無しさん
09/08/10 18:53:10
WindowsXP、EXCEL2003を使用しています。
シートのA1から下に30個くらい名前が書いてあり、その名前ごとに新しいシートを追加したいです。
こういうのって簡単にできる人には簡単すぎると思うんですが、教えてもらえるとうれしいです。

406:デフォルトの名無しさん
09/08/10 21:03:09
試してないがこうか?

sub シート追加()
for a = 1 to 30
if cells(a,1) <> "" then sheets.add.name = cells(a,1)
next
end sub

407:デフォルトの名無しさん
09/08/10 21:32:35
試してないがこの方がいいか?

For Each cell In Range(Range("A1"), Range("A1").End(xlDown))
  Worksheets.Add(, Worksheets(Worksheets.Count)).Name = cell.Value
Next cell


408:デフォルトの名無しさん
09/08/10 21:46:22
試してないけどこうじゃね!

Application.DisplayAlerts = False
For Each a In Sheets
a.Delete
Next
Application.Save
Application.DisplayAlerts = True

409:デフォルトの名無しさん
09/08/10 21:47:29
ためせよw

410:デフォルトの名無しさん
09/08/10 23:05:31
試してないけどこれでいけるってビルゲイツが言ってた

For Each C In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
 Worksheets.Add after:=Sheets(Sheets.Count)
 ActiveSheet.Name = C
Next C


411:デフォルトの名無しさん
09/08/10 23:20:12
試したらこれでいけた

Sub aaa()
Application.DisplayAlerts = False
For a = 2 To Worksheets.Count
Sheets(a).Delete
Next
ActiveSheet.Cells.Clear
Application.Save
Application.DisplayAlerts = True
End Sub

412:デフォルトの名無しさん
09/08/10 23:43:20
>411
>試したらこれでいけた

試してないけどSheets(a).Deleteはダメぢゃネーノ?

413:デフォルトの名無しさん
09/08/11 01:42:10
aは変数なんじゃね

414:デフォルトの名無しさん
09/08/11 06:36:51
>>410
試してないけど、ここは大丈夫か?

Worksheets.Add after:=Sheets(Sheets.Count)

415:デフォルトの名無しさん
09/08/11 07:04:26

オートシェイプに背景画像を挿入する場合についての質問です。

手動でやる場合、
・オートシェイプの書式設定
 ・塗りつぶし
  ・色
   ・塗りつぶし効果
    ・図
     ・図の選択
で、画像を挿入した際に、同ページに
 □図の縦横比を固定する
 □図形に合わせて塗りつぶしを回転する
というオプションがありますが、このオプションをVBAで変更する方法を教えてください。

マクロの記録をしても、変更が記録されずに困っています。

WindowsXP/Office2003

416:デフォルトの名無しさん
09/08/11 09:39:24
>413

試してないけどシートのインデックス番号って削除したら前詰めじゃね?
Sheets(1).Deleteなら分かる。

417:デフォルトの名無しさん
09/08/11 10:20:16
>>414
試してみたら2000では動いた
2003では試してないけど

418:デフォルトの名無しさん
09/08/11 10:50:25
>>324の件ですが、どなたかご教授いただけないですかね・・・?

419:デフォルトの名無しさん
09/08/11 11:04:25
>>404
お前は何と戦ってるんだ

420:デフォルトの名無しさん
09/08/11 13:15:24
>>418
TCPIPの問題
ブラウザはデフォルトでアドレス変換したりするけどね
エクセルでやりたいなら
¥¥PC名¥フォルダ〜
とかにしたら

とりあえずググれば解決できる

421:デフォルトの名無しさん
09/08/11 13:17:45
>>419
いきなりどうしたの?

422:デフォルトの名無しさん
09/08/11 13:44:49
>>420
スレ違いなうえに、適当なことかましてんじゃねーぞ、ボケ

423:デフォルトの名無しさん
09/08/11 13:51:04
>>415
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Rotation = 0#

424:415
09/08/11 15:23:47

>>423
> Selection.ShapeRange.LockAspectRatio = msoTrue
は、
・オートシェイプの書式設定
 ・サイズ
  ・倍率
   ・縦横比を固定する
のON/OFFですね。


> Selection.ShapeRange.Rotation = 0#

・オートシェイプの書式設定
 ・サイズ
  ・サイズと角度
   ・回転角度
の指定です。

どちらも目的の物とは全く違うようです。


425:デフォルトの名無しさん
09/08/11 16:22:39
>>422
が理解不能なのは俺だけ?
回答なのにスレ違いってなんぞ

適当云々は知らんけど、丁度いいし説明してくれるのかな?

426:デフォルトの名無しさん
09/08/11 17:53:16
VBA関係ないし、百歩譲ってもTCP/IPの問題じゃないし

427:デフォルトの名無しさん
09/08/11 18:02:11
>>425
適当かどうかも判断できないんだったら、黙っとけ

428:デフォルトの名無しさん
09/08/11 18:30:47
こういうことかな
URLリンク(ebi.dyndns.biz)

おい関係ないなら誘導しろよ
かいとう者に噛み付くなkzg
あと説明もできないなら黙ってろ
さっさと市ね



429:423
09/08/11 19:28:20
>>424
     ・図の選択
で、画像を挿入した際に、同ページに
 □図の縦横比を固定する
 □図形に合わせて塗りつぶしを回転する

Excel97だとそういうオプションないんだよな

430:デフォルトの名無しさん
09/08/11 21:14:34
言い訳になってねーw

431:デフォルトの名無しさん
09/08/11 22:46:30
>424
ヘルプ参照または本屋にスパテク○○系を立ち読みしてくるべし。

432:デフォルトの名無しさん
09/08/12 10:40:26
初心者ですが、質問よろしいでしょうか。

rangeやcellsは、オブジェクトになったりプロパティになったりとするのでしょうか。
私の認識では、rangeはオブジェクト、cellsはプロパティですが、
いろいろなコードを見ると オブジェクトとなったりプロパティになったりしているので
ケースバイケースで使えるのかなと思ったのですが、これで合ってるのでしょうか。

433:デフォルトの名無しさん
09/08/12 11:00:35
オブジェクトとプロパティの意味を勉強しなおせ。

434:432
09/08/12 11:13:26
オブジェクト=対象
プロパティ=属性


435:432
09/08/12 11:16:34
修正
オブジェクト=構成要素


436:デフォルトの名無しさん
09/08/12 11:37:44
なら分かるだろ?

>私の認識では、rangeはオブジェクト、cellsはプロパティですが、

その認識が間違い。
Rangeに変数が使えないとかCellsでは1セルor全セルしか指定できない
などの制約によって使い分けてるだけ。

437:デフォルトの名無しさん
09/08/12 11:47:33
>>436
その説明もおかしいだろw

438:432
09/08/12 12:17:09
すいません。。。
勉強しはじめたばかりで。


439:デフォルトの名無しさん
09/08/12 12:35:00
>>436
Range("A" & i).Valueとかよく使うよ

手元のVBA辞典だと
Rangeはオブジェクトとプロパティ
Cellsはプロパティ

実例でいうと
Range("B2").Cells(2, 2).Activate
Range("B3").Range("B2").Activate
と書けるが
Cells(3, 2).Range("B2").Activate
とは書けない

440:デフォルトの名無しさん
09/08/12 12:39:43
Range("B3").Range("B2").Activate

オブジェクト.プロパティ.メソッド

441:432
09/08/12 12:47:08
439さん
ありがとうございます!
VBA辞典買います。

ずうずうしくもうひとつ質問です。

Worksheets("sheet1").Cells(i,5).Value
この場合
コレクション.プロパティ.プロパティ でしょうか。

442:デフォルトの名無しさん
09/08/12 13:27:02
Cells.selectは?

443:デフォルトの名無しさん
09/08/12 13:27:52
コレクションはオブジェクトの集合体

Worksheets("sheet1")はオブジェクト

Worksheetsはコレクション

実例
Worksheets.Count

Worksheetsコレクションに含まれるWorksheetsオブジェクトの数

444:デフォルトの名無しさん
09/08/12 13:29:18
プロパティで取得できるものが、オブジェクトだったりそうでなかったりするんだ。
rangeプロパティもcellsプロパティもrangeオブジェクトを取得できる。

rangeのcountプロパティはlongを返す。

>Cells(3, 2).Range("B2").Activate
書ける。

コレクションもオブジェクトだコラ。

445:デフォルトの名無しさん
09/08/12 13:43:14
Cells.selectのCellsは、Cellsコレクション

>444
Cells(3, 2).Range("B2").Activateって書けたね、スマソ

>コレクションもオブジェクトだコラ
それはそうだが、
コレクションはCountできるが、オブジェクトはCountできないし
オブジェクトにNameはあるが、コレクションにNameはない

446:デフォルトの名無しさん
09/08/12 13:46:21

             /)
           ///)
          /,.=゙''"/   
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /




447:デフォルトの名無しさん
09/08/12 14:13:24
>>445
お前もう何も書くな

448:432
09/08/12 14:18:12
なるほど。
勉強になりました。

ありがとうございます。

449:デフォルトの名無しさん
09/08/12 16:52:27
>>445
マジなのかジョークなのか、判断に苦しむ。

450:デフォルトの名無しさん
09/08/12 17:49:21
はじめまして
LineInputでファイルを一行づつ読み込みたいのですが
読み込みたいファイルがUNIXのファイルなんで改行がLFとなり一行と認識してくれません。
一行ごとに読みたいのですが何かいい方法ありますか?

451:デフォルトの名無しさん
09/08/12 18:06:22
>>450
変数に読み込んでからvblfで分割がいいのでは?>>215あたりを参照

452:デフォルトの名無しさん
09/08/12 20:54:40
ワークシートを呼び出すとき、
Sheet1のようなオブジェクト名で呼ぶのと、
Sheets("名前")で呼ぶのとでは、
動作が異なる場合がある?なぜ?

Sheet1(名前は"テスト"):
Sub test(X As TestType)
MsgBox X.a
End Sub

標準モジュール:
Type TestType
a As String
End Type
Sub test()
Dim X As TestType
X.a = "ほげ"
Call Sheet1.test(X) '動く
Call Sheets("テスト").test(X) '動かない
End Sub

なるべくシート名を使いたいのだが…

453:デフォルトの名無しさん
09/08/12 21:56:02
>>452
詳しい人が来るまでの繋ぎに気付いた点をレスすると
シート名と言ってもオブジェクト名としてのシート名と表示上のシート名は多分別物で
VBEで「sheet1(うんじゃらげ)」の前半が多分オブジェクトとしてのシート名。
プロパティーウィンドウから変更できた気がするようなしないような。

質問のケースへの対応なら
表示上のシート名からインデックス番号を取得してそれを使うのが早いかな?Byなんちゃって回答者

454:デフォルトの名無しさん
09/08/12 22:09:47
>>453 ありがとうございます、
Sheet1と書いたのはオブジェクト名としてのシート名、
Sheets("テスト")は表示上のシート名です。

オブジェクト名もプロパティウィンドウから変更できるのを
いま知ったので、今後はオブジェクト名だけを使えば解決、だけど、
ここまで全部、表示上のシート名で書いてきたから変更がめんどいのと、
上記の動作が異なるメカニズム自体を知っておきたくなって。

455:デフォルトの名無しさん
09/08/12 22:52:17
Sheet1はクラス、Sheets("sheetname")はWorkSheetオブジェクト


456:デフォルトの名無しさん
09/08/12 23:10:33
又、オブジェクト指向の話かww

457:デフォルトの名無しさん
09/08/13 00:05:49
>>455 だと、なんで>>452のようになるの?

458:デフォルトの名無しさん
09/08/13 00:09:02
>>455
Sheet1は事前バインディング、Sheets("テスト")は実行時バインディング


459:デフォルトの名無しさん
09/08/13 00:21:06
>>455
Excel2000(VB6.0)でも再現したからそれはない

460:デフォルトの名無しさん
09/08/13 00:41:12
>>459
vb6.0にクラスの概念がないと思っている人?

461:458
09/08/13 00:41:15
失礼、
>>458>>452宛で

462:452
09/08/13 00:57:14
>>458 ありがとうございます。
Excel VBAでのオブジェクト指向の理解が足りないので
十分には理解できてませんが、教えた頂いたキーワードでググったら、
何が問題なのかはちょっとわかりました。

シートの参照は、どちらでもいい場合は
事前バインディングになるSheet1のほうがメリット多そうなので、
以後なるべくこちらを使うことにします。

463:デフォルトの名無しさん
09/08/13 01:06:26
>>460
>>455が暗黙のインスタンスのことを言っていると解釈した上でのレスだ


464:デフォルトの名無しさん
09/08/13 01:15:52
formsコレクション知ってるならいいよ。

465:デフォルトの名無しさん
09/08/13 01:22:09
>>464
ごめ。いみふだ。なしで。

466:デフォルトの名無しさん
09/08/13 12:37:06
Excel2003/XP

配列で質問させてください。

Dim myArray() As Variant
Dim r As Long

r = Range("C1").End(xlDown).Row
ReDim myArray(r)
myArray = Range("C1:C" & r)

MsgBox myArray(1) '←エラー発生

End Sub

Msgboxでエラーとなるのですが、原因はmyArrayが2次元
配列になっているのが原因でした。

ステップインで確認すると
myArray = Range("C1:C" & r)
の時にローカルウィンドウの型で確認すると2次元になってしまいます。

何故配列myArrayは2次元になってしまうのでしょうか?


よろしくお願いします。

467:デフォルトの名無しさん
09/08/13 12:38:19
セル範囲を流し込んだから
仕様

468:466
09/08/13 13:31:03
>>467

仕様でしたか・・・

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

469:デフォルトの名無しさん
09/08/13 17:11:11
検索する時に検索値に変数を代入するにはどうしたらいいのでしょうか?
例えば、変数Aに「りんご」を代入し、ワークシート全体から「変数A」で検索して「りんご」を探したいのですが・・・

470:デフォルトの名無しさん
09/08/13 18:58:46
検索をマクロで記録して、 "" で囲まれてる文字列の部分を、
ダブルクオーテーション外して変数名にすれば良いのさ。

471:デフォルトの名無しさん
09/08/13 21:29:27
ユーザー設定ボタンをツールバーに組み込んでるんですが、
ボタンでトグル動作、例えば書式の太字や斜体みたいのやりたいのですが、
マクロ内でボタンが押される度に画像を変えて、状態を記録してってやらんとダメでしょうか?
プロパティとかでトグルボタンが設定できて状態が読めたりするとうれしいのですが

472:デフォルトの名無しさん
09/08/13 23:00:29
インプットボックスを使って20個の整数を入力して、大きい順に並べ替える
プログラムを作りたいんですが、簡単に作れますかね??

VBAはほとんど素人で、今勉強を始めたばかりです。。
とりあえずコレは明日までに仕上げたいんですが、

473:デフォルトの名無しさん
09/08/13 23:15:19
>>472
割と簡単だけどズブの素人が明日までに仕上げるのは無理かも

474:デフォルトの名無しさん
09/08/13 23:26:24
>472

アキラメロン♪

475:デフォルトの名無しさん
09/08/13 23:58:36
ひんとやるわ
Sub test()
Dim lst As New Collection

lst.Add (InputBox("1:"))
lst.Add (InputBox("2:"))
lst.Add (InputBox("3:"))
lst.Add (InputBox("4:"))
lst.Add (InputBox("5:"))

For Each v In lst
'ここでソートしてね
Debug.Print v
Next
End Sub

476:デフォルトの名無しさん
09/08/14 00:13:30
>>472
作ってみたよ。

Option Explicit

Sub 整数を入力して大きい順に並べ替える()

Dim aaa As Integer

For aaa = 1 To 20

Cells(aaa, 1).Value = Application.InputBox(Prompt:="数値を入力してください", _
Title:="数値入力", _
Type:=1)

Next

Range("A1:A20").Sort _
Key1:=Range("A1") _
, Order1:=xlDescending _
, Header:=xlGuess _
, MatchCase:=False _
, Orientation:=xlTopToBottom _

End Sub

477:デフォルトの名無しさん
09/08/14 03:51:41
>>475

>>476


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

お二人に神のご加護があらんことを!



478:デフォルトの名無しさん
09/08/14 03:58:38
今のところ、まだIF文とかfor文までしか理解できてないんで、2人の文にあった関数調べて頑張ります!


本当助かりました!



479:415
09/08/14 09:58:19

>>431
ヘルプは質問前に項目名で検索してみましたが、関係ない物ばかりで
目的の物は出てきません。

「スパテク○○系」というのが「ExcelVBAスパテク368」のことなら
読んできましたが載ってませんでした。

「スパテク○○系」というのがこれではなく、他に確実に載ってるものがあるなら
出来れば内容を教えて欲しいところですが、せめて正式な書籍名だけでも教えてください。

確実に載ってる書籍が無いなら、引き続きここで >>415 をお願いします。

480:デフォルトの名無しさん
09/08/14 12:02:35
>>471
application.commandbars.コントロール

じゃいかんかね

481:デフォルトの名無しさん
09/08/15 00:23:05
>>480
それをヒントに頑張ったらでけた
CommandBarButton.State にボタンのON−OFFがあった
ありがとう

482:デフォルトの名無しさん
09/08/15 12:43:39
すいません教えてください

FileCopy D:\aaa.txt, "C:\aaa.txt"
これでD直下にあるaaa.txtファイルをC直下にコピーするという事ですが

これだとどうしてもaaa.txtというファイル名を指定しなければなりません
これを
FileCopy D:\aaa.txt, "C:\"
みたいにaaa.txtをC直下にそのままの名前でコピーさせたい場合ってどうすればいいのでしょうか?

483:デフォルトの名無しさん
09/08/15 13:38:13
>>482
どんなシチュエーションかわからんけど
第一引数でファイル名を指定する必要がある以上ファイル名は既に分かっているはず

例えば
filename="aaa.txt"
FileCopy "D:\"&filename,"C:\"&filename
みたいなんだとダメなん?

あとはFileCopyじゃなくてFileSystemObject使うとか

484:デフォルトの名無しさん
09/08/15 14:48:42
>482
用途が分からんけど
Source = "D:\aaa.txt"
Destination = "C:\"

'Sourceからファイル名のみを取出す処理をここに記述

FileCopy Source, Destination & FileName

とすればいいんじゃない?

ファイル名のみを取出すのは、文字列関数なんかを使えば
できると思うけど......


んで 自分ならこうするってのを参考程度に
作ってみた(Dir関数を使用)

Dim Source, Destination, FileName
Source = "D:\aaa.txt"
Destination = "C:\"
FileName = Dir(Source)
If FileName <> "" Then
    FileCopy Source, Destination & FileName
   Else
    MsgBox (Source & "が見つかりません")
End If

485:デフォルトの名無しさん
09/08/15 14:53:36
EXCEL2003,XPsp2です。

次のコードが実行時エラー1004になります(2行目)。

c=5
Columns("3:" & c).Select

列選択の範囲を可変(実行時決定)にしたいのですが、
どうすればよいのでしょうか。

よろしくお願いします。



486:デフォルトの名無しさん
09/08/15 15:33:50
>485
なんかColumnsの使い方間違っているような
あんまし詳しくないんでなんとも言えないけど

Range使っちゃだめなケースなの?

487:485
09/08/15 16:10:43
>>486
レスありがとうございます。

3列からc列まで選択できれば、何でも結構です。
ちなみにRangeだと、どうすれば良いのでしょうか?


488:デフォルトの名無しさん
09/08/15 16:13:43
>>487

つマクロの記録

489:486
09/08/15 16:41:19
>487
このケースは、VBAを使う上での基本中の基本だとおもうので
調べてくださいとしかいえません。

 >1 の★5 と★6 を熟読の事

490:487
09/08/15 17:07:16
>>488,489
レスありかどうございます。

マクロの記録には、

Columns("3:5").Selectと出てきます。

c=5
Columns(〜c〜)とは出て来ません(変数を使ったコードは出てこない)。

どうすれば良いのでしょうか?


491:デフォルトの名無しさん
09/08/15 17:24:58
>>490
>>(変数を使ったコードは出てこない)。

出てくるわけネーダロw


492:デフォルトの名無しさん
09/08/15 17:47:37
>>490
dim c as string

c = "5"

でどうでしょう?

493:デフォルトの名無しさん
09/08/15 17:49:02
>>487
ヒント

range ( , )
columns(3)
columns(c)
.select

494:デフォルトの名無しさん
09/08/15 18:06:48
>>493
492ですができました。
勉強になりました。
ありがとうございます。

495:デフォルトの名無しさん
09/08/15 18:16:48
マクロの記録をすると
Columns("C:E").Select
ってでてくるよ

>>492
"3:" & c
&は文字の結合だから

496:デフォルトの名無しさん
09/08/15 18:19:09
Columns("3:5").Selectって記録マクロでできるか?
Range("3:5").SelectとかRange("3:5").Selectならわかるが、Columns("3:5")は動かんなぁ。
記録マクロが動かんマクロになるわけないと思うが。


497:デフォルトの名無しさん
09/08/15 18:20:03
493で答え出とるがな

498:デフォルトの名無しさん
09/08/15 18:20:14
すまん、Range("3:5").SelectとかRows("3:5").Selectの間違い。

499:492
09/08/15 18:22:07
すいません。
僕のは間違えです。

500:486
09/08/15 19:17:25
>>495 へのレス
>>490 >>495 は同一人物だと仮定してレスします 別人だったらすみません。

  >>490
   >マクロの記録には、
   >Columns("3:5").Selectと出てきます。

  >>495
   >マクロの記録をすると
   >Columns("C:E").Select
   >ってでてくるよ

なんかレス番によってマクロの記録結果が違っているのですが....
Columns("3:5").Select って本当に記録された?

501:デフォルトの名無しさん
09/08/15 20:07:43
ヒント 列と行を広辞苑で調べてみようっ!


502:デフォルトの名無しさん
09/08/15 21:34:46
オブジェクトやプロパティやメソッドの検索の基本的なやり方を教えて頂きたいです。

オブジェクトブラウザ
インテリジェンス
ウォッチ
ヘルプ、MSDN、Google

等々ありますが、これらの強み弱み、表示できない事、表示できる事を、
上手くまとめて頂けないでしょうか。

ウォッチでは実行時のプロパティーは表示されるけど、
何故か一部のプロパティーが表示されないし、
メソッドは当然の如く表示できません。

オブジェクトブラウザやインテリジェンスは、
実行時系プロパティーが当然取れません。
隠しオブジェクトについては、表示する様にすれば表示できますが。

ヘルプは実行時系も隠しもメソッドも全てあると思いますが、
検索性に難ありで、網羅性や信頼性に疑いを持ってしまう所アリ。

間違いがあったり、足りない所があれば教えて頂きたいです。

アーリーバインディングやレイトバインディングとか、
その辺りとの関わりも良く分かって無いです、
教えていただけると助かります。

503:デフォルトの名無しさん
09/08/15 22:32:48
宿題は自分で頑張ってね。

504:デフォルトの名無しさん
09/08/15 22:34:06
>>502

ググレカス

505:デフォルトの名無しさん
09/08/15 23:30:05
質問です
一つ目
選択範囲のセルをオブジェクト変数に代入するにはどうすればよいでしょうか?
Dim aaa
aaa = Selection
としてもaaaにはvalueしか入らず、文字列の配列になってしまいます。

二つ目
選択範囲の全てのセルに対し、
長さが5じゃなければそのセルに文字列""を代入するというコードを書いてみましたが
aaa = ""
の行で「実行時エラー'10'
この配列は固定されているか、または一時的にロックされています」
というエラーが出ます。どういう風に書けばよいのでしょうか?
また、aaaの文字列の配列に直接値を入れたとしてもselectionに反映されません。これもどうすればよいのでしょうか?
勉強中に作ってみたものなので、特にこのコードを使って何かを処理するわけではありません。
コレクションをうまく使ってみたいと思っています。
よろしくお願いします。

Sub a()
Dim aaa
Dim m
aaa = Selection

For Each m In aaa
If Len(m) <> 5 Then
aaa = ""
End If
Next

End Sub


506:デフォルトの名無しさん
09/08/15 23:51:17
>>555

Sub test()

Dim rng

Set rng = Selection

For Each cell In rng
If (Len(cell) <> 5) Then
cell.Value = ""
End If
Next

End Sub


507:デフォルトの名無しさん
09/08/15 23:55:21
>>506
おお、すごい!ありがとうございました

508:デフォルトの名無しさん
09/08/16 00:34:34
>>505 はオブジェクト指向の考え方を一度学んだ方が良いと思う
今後も、できねー、なんで?を連発の予感

509:デフォルトの名無しさん
09/08/16 00:37:25
dimで宣言するなら型までだな

510:デフォルトの名無しさん
09/08/16 00:39:51
>>509
同意
更に option explicit を入れないと何となく動くけど、変なエラーが・・・になる

511:デフォルトの名無しさん
09/08/16 00:46:42
C使ってるとこの表現忘れがちになるな
俺だけかな

512:415
09/08/16 08:44:11

既に目を通してくれた方には煩わしいかもしれませんが
未解決のまま流れているので再投させていただきます。

オートシェイプに背景画像を挿入する場合についての質問です。

手動でやる場合、
・オートシェイプの書式設定
 ・塗りつぶし
  ・色
   ・塗りつぶし効果
    ・図
     ・図の選択
で、画像を挿入した際に、同ページに
 □図の縦横比を固定する
 □図形に合わせて塗りつぶしを回転する
というオプションがありますが、このオプションをVBAで変更する方法を教えてください。

マクロの記録をしても、変更が記録されずに困っています。

WindowsXP/Office2003

513: [―{}@{}@{}-] デフォルトの名無しさん
09/08/16 09:01:18
drawingobjectでどうだ


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

4310日前に更新/149 KB
担当:undef