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


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

Excel VBA 質問スレ Part23



1 名前:既定のプロパティさん mailto:sage [2012/01/29(日) 00:05:13.16 ]
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/
13 pc12.2ch.net/test/read.cgi/tech/1254281104/
14 pc12.2ch.net/test/read.cgi/tech/1262748898/
15 pc12.2ch.net/test/read.cgi/tech/1271261239/
16 hibari.2ch.net/test/read.cgi/tech/1280045912/
17 hibari.2ch.net/test/read.cgi/tech/1289182437/
18 hibari.2ch.net/test/read.cgi/tech/1298240666/
19 hibari.2ch.net/test/read.cgi/tech/1305754555/
20 hibari.2ch.net/test/read.cgi/tech/1312435844/
21 hibari.2ch.net/test/read.cgi/tech/1316931607/

前スレ:
Excel VBA 質問スレ Part22
toro.2ch.net/test/read.cgi/tech/1322400978/


56 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 06:32:53.23 ]
>>54
初めての保存→直接Excelを起動しての作成
2回目以降→既存のBookを呼出し修正保存

意味はこれで合っている?
1年1組成績表フォルダの1月成績結果というBookを呼出して新規作成を選んだ時の保存先もやはりマイドキュメント?
或いは2月成績結果にBook名に流用変更して保存する場合は?

57 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 06:16:46.60 ]
>>53
残念、ハズレ

というか、そもそも「単草」なんてないから

草=複数の連続する"w"
   数が複数と定義されているので、単数を表す接頭語を付けることは無い

芝="w"そのものであり数は関係ない
   数が定義されていないので、数を表す接頭語を付けることもある->単芝、複芝

「単草」ってのは君と同じく、単芝と草を混同した勘違い君が
思いつきで口にするだけで、定義としては存在していない

58 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 07:16:08.51 ]
>>57
どっちでもええやん
言葉とはそういう勘違いから定着するもんだよ

正しい日本語は〜と言ってる学者連中はただの馬鹿だぞ
もう広まってる用法ってのは正しいものとしていかんと

59 名前:デフォルトの名無しさん [2012/02/04(土) 07:16:34.18 ]
>>57
そもそも「草」とか「芝」とかが定義されてるってどこで?
少なくとも非ネットの日常生活においてwを草とか芝とか言わない訳だが。
単にネット上のコミュニティーで認知されてると「君個人が認識してる」だけでしょ。
だったら「単草」だっておkじゃないの?
その辺の線引きが曖昧すぎだよ

ちなみに>>53ではありません。
草とか芝の定義とやらにも興味ないです

60 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 08:03:57.05 ]
ネタ解説に釣られ杉wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

61 名前:デフォルトの名無しさん [2012/02/04(土) 09:02:23.24 ]
言い負かされるとネタで逃げる奴

62 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 09:14:49.65 ]
かまうなよ
これは僕はレス乞食ですって自己紹介をしてるだけなんだからwwww

63 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 10:15:29.22 ]
>>58
いい訳必死だな

あのさ、誤用と、新語や新たな言い回しを一緒くたにしてないか?
別に既存の日本語以外は使っちゃだめとは言わないけど、
間違いを内包する言葉までまとめて「定着すればそれは正しい」なんて言うのはただの馬鹿だぞ

wを芝と呼ぶのは良いが、wをエックスと呼ぶのは明らかな間違いだろ


>>59
> 「w」の文字が並ぶ様子が「雑草が生えているように見える」というところから、
            ~~~~~~
> 「w」を多数並べて笑いを表現する行為を「草を生やす」と呼ぶ場合がある。
      ~~~~~~~~~~~~~

> 草 - ネットスラングでwwwwwwwのこと。


> 草:インターネットスラングのひとつ。(笑)の略であるwを多数書き連ねることで蔑笑を表したもの。
                                                ~~~~~~~~~~~~~~~~~

どこを見ても、「並ぶ」「多数」「書き連ねる」と複数であることを説明し、例としても7連のものが上げられている
因みに上記は独断と偏見入り交じる個人サイトの記事ではなく、ウィキペやニコペなど大手の手がける辞典の記事ですよ

64 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 10:42:23.74 ]
荒らすなら他へ行け、馬鹿



65 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 11:04:08.52 ]
こういう話題しかレスできないんだろ。
スルーしとけ。

66 名前:デフォルトの名無しさん [2012/02/04(土) 11:44:22.68 ]
wikiが定義ってアホかと

67 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 13:21:17.58 ]
広辞苑だって出版された当時のスラングを個人の独断で大量に収録してんのに
それは信頼してWikipediaをバカにする男の人って本質がわかってないってゆーか、頭悪いよね

68 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 13:41:55.07 ]
反射的に wiki を馬鹿にする奴もどうかと思うが、
広辞苑が個人の判断で作られてるって、これまた
頭悪い以前のアホが来たな。


69 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 17:37:20.46 ]
wikiをバカにしてるんじゃなくて、wikiがネットスラングの定義だって言ってるやつをバカにしてるんじゃないかな

70 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 18:56:03.91 ]
まあ結論は出たみたいだから、もう終わりにしようぜ。

71 名前:54 mailto:sage [2012/02/04(土) 19:32:32.70 ]
>>55-56
レス、ありがとうございます。
返事が遅くなってすみません。

ユーザーフォームに保存用のボタンを貼って、保存しようとしています。
保存を行った時に保存先フォルダーの記憶用変数を用意して、その変数が
空なら初めての保存、空白以外なら保存用ダイアログを表示した時にそのフォルダーが
表示したいという事でした。
変数に取り込めれば、フォームを閉じる際にiniファイル等に保存して次回以降は
フォルダー選択の手順を省けると思いました。

よろしく御願いします。

72 名前:54 mailto:sage [2012/02/04(土) 19:55:05.76 ]
書き忘れました。
保存先記憶用変数が空の場合は、保存先ダイアログ表示時の
フォルダーはExcel任せでも良いです。
よろしくお願いします。

73 名前:デフォルトの名無しさん [2012/02/04(土) 20:05:32.51 ]
iniファイルへの書き込みや読み込みはAPI使うっての知ってますか?
まぁ単純にテキストファイルのオープンで読み込み書き込みでも出来なくはないだろうけど


74 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 20:16:21.93 ]
>>72
で、何がわからないの?



75 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 21:11:43.87 ]
>>71
chdir 前回保存先
名前を付けて保存ダイアログ表示
今回保存先を選択
非表示シートにcurdir(今回保存先)を書きみ保存
名前を付けて保存


76 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 23:05:00.06 ]
複数のブックの一部を読み取っていくマクロを書いているのですが
非表示・バックグラウンドでブックを開くにはどうしたら良いのでしょう?
ググったりしていろいろ試してみたのですが、どうしても一瞬表示されてしまいます。 マクロは
Application.ScreenUpdating = False
Set _ActiveSheet = ActiveSheet
Set book = Workbooks.Open(PATH)
book.Windows(1).Visible = False
Call _ActiveSheet.Activate()
Application.ScreenUpdating = True
というようにしています。

また、ブックのオープンに時間がかかっているため、非同期でブックをオープンしてそれをキューに放り込んで行きたいのですが、
こういったことはどうやってやれば良いのでしょう?

77 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 23:20:48.95 ]
>>71
ini ファイルじゃなくて、ブック自体に覚えさせることもできるよ。

Option Explicit
Const PropertyName As String = "SavedFolder"
Sub Macro1()
 Dim SavedFolderProperty As DocumentProperty
 Set SavedFolderProperty = Nothing
 Dim Index As Integer
 With ActiveWorkbook.CustomDocumentProperties
  For Index = 1 To .Count
   If .Item(Index).Name = PropertyName Then
    Set SavedFolderProperty = .Item(Index): Exit For
   End If
  Next
 End With
 With Application.FileDialog(MsoFileDialogType.msoFileDialogSaveAs)
  .FilterIndex = 2
  If SavedFolderProperty Is Nothing Then
   .InitialFileName = ""
  Else
   .InitialFileName = SavedFolderProperty.Value
  End If
  .Show
  If SavedFolderProperty Is Nothing Then
   ActiveWorkbook.CustomDocumentProperties.Add PropertyName, False, MsoDocProperties.msoPropertyTypeString, .SelectedItems.Item(1)
  Else
   SavedFolderProperty.Value = .SelectedItems.Item(1)
  End If
  .Execute
 End With
End Sub

78 名前:2000 mailto:sage [2012/02/05(日) 02:30:18.27 ]
>>76
> Application.ScreenUpdating = False
> Set _ActiveSheet = ActiveSheet
> Set book = Workbooks.Open(PATH)
> book.Windows(1).Visible = False
> Call _ActiveSheet.Activate()

ActiveWorkbook.Close

> Application.ScreenUpdating = True


79 名前:デフォルトの名無しさん [2012/02/05(日) 17:31:56.30 ]
エクセルの関数について質問です。

B1セルに10が入っていたらA1セルに100と返し、
  〃 11か12、13のいずれかの数字が入っていたらA1セルに200と返し、
  〃 14が入っていたらB1セルに300と返し、
  〃が空欄もしくは、10.11.12.13.14以外の数字が入っていたら100と返す
数式を組みたいのですがIFとORを組み合わせてもうまくいきません。
どなたかご教授頂けますでしょうか。

80 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:38:45.19 ]
それをVBAでやりたいってことかな?

81 名前:79 [2012/02/05(日) 17:43:45.11 ]
>80
いえ、違います。
エクセル上で上記の数式を完成させたいだけです。

82 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:46:29.32 ]
>>81
だったら
Excel総合相談所 100
toro.2ch.net/test/read.cgi/bsoft/1325935411/l50



83 名前:79 [2012/02/05(日) 17:50:34.95 ]
あ、スレ違いでしたね。
ちょっとこっちで質問してみます。

84 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 03:30:45.14 ]
同一コードなのに、コードのキャッシュでもされてるのか、結果不定で「?」なときがあると思いますが、そんな時の対処方法はありますか?



85 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 04:16:29.46 ]
構文エラーを起こす

86 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 05:30:54.13 ]
>>84
プログラムとは…
自分が思った通りに動く物ではない
自分が書いたとおりに動くのである

つまり結果が自分の希望に反して不定になるのは書き方が悪い。はっきり言えば間違ってる
よく見直せ

87 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 06:58:44.08 ]
Excel2003です
セルの内容でDBに更新を行う処理です

Set crs = New ADODB.Recordset
crs.CursorType = adOpenDynamic
crs.LockType = adLockOptimistic
crs.CursorLocation = adUseClient
crs.ActiveConnection = cn
'
sSQL = ""
sSQL = sSQL & "SELECT *"
sSQL = sSQL & " FROM WSEL"
sSQL = sSQL & " ORDER BY WSEL.Chusyutu"
crs.Source = sSQL
crs.Open
'
Do Until crs.EOF
  :
  DBの項目にセット処理
  :
crs.Update     ←エラー発生
crs.MoveNext
Loop
crs.Close

1/2

88 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 06:59:45.09 ]
2/2

DBはMySQLをODBCで使用しています
Updateのところでエラーが発生します
実行時エラー '-2147217864 (80040e38)':
行が見つからなかっため、更新できません。列の値は最後に読み込まれた後で変更された可能性があります。

OpenしてからUpdateまでただ項目をセットしているだけでカーソルを移動させていません
項目のセット処理を削除するとエラーは出ません
ただの ○○=×× という処理でカーソルが移動するとは思えないのですがどんな問題があるのでしょうか?

89 名前:デフォルトの名無しさん [2012/02/06(月) 11:02:10.59 ]
ADOのUpdateコマンドではなくSQLのupdate文を
その例で言えば
crs.Execute updateのsql文
という書き方でいつもExcelからmysqlに対してやってる
そのやり方ではどうなの?

まぁ続けるとスレ違いと騒ぎ出す野郎が多そうだから
mougのDB板で聞いてみたら?

90 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 20:30:01.60 ]
>>89
レスどうもです
>crs.Execute updateのsql文
この方法でやってみます
もし上手くいかなかったらDB板で聞くことにします
ありがとうです

91 名前:84 mailto:sage [2012/02/07(火) 02:38:18.51 ]
>>85
なるほど。ありがとうございます。
>>86
ワロタ

92 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 04:59:35.62 ]
それ主キーがないとかで行を特定できてないだけじゃないのか

93 名前:デフォルトの名無しさん [2012/02/07(火) 12:04:22.02 ]
質問です。
「初項(セル B3 の値)と公差(セル C3 の値)を元にして, セル範囲 B5:G5 に等差数列の値を入力する
マクロ「等差数列」を定義せよ」
という課題があるのですが、何から手を付ければいいのか分かりません。
よろしければご教授お願いします。

94 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 12:13:41.21 ]
公式にぶちこめ



95 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 15:15:08.32 ]
>>93
おっぱい見せて

Option Explicit
Private Sub マクロ等差数列()
  Dim 初項 As Double
  Let 初項 = Application.ThisWorkbook.ActiveSheet.Range("B3").Cells(1, 1).Value
  Dim 公差 As Double
  Let 公差 = Application.ThisWorkbook.ActiveSheet.Range("C3").Cells(1, 1).Value
  Dim 数列1番目 As Double
  Let 数列1番目 = 初項
  Application.ThisWorkbook.ActiveSheet.Range("B5").Cells(1, 1).Value = 数列1番目
  Dim 数列2番目 As Double
  Let 数列2番目 = 数列1番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("C5").Cells(1, 1).Value = 数列2番目
  Dim 数列3番目 As Double
  Let 数列3番目 = 数列2番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("D5").Cells(1, 1).Value = 数列3番目
  Dim 数列4番目 As Double
  Let 数列4番目 = 数列3番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("E5").Cells(1, 1).Value = 数列4番目
  Dim 数列5番目 As Double
  Let 数列5番目 = 数列4番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("F5").Cells(1, 1).Value = 数列5番目
  Dim 数列6番目 As Double
  Let 数列6番目 = 数列5番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("G5").Cells(1, 1).Value = 数列6番目
End Sub

96 名前:デフォルトの名無しさん [2012/02/07(火) 16:41:05.20 ]
すみません、ワードのVBAについてはどこか質問スレってありませんでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:30:37.03 ]
>>96
専門スレはないのでここで聞いてみる

Word(ワード)総合相談所 Part21
toro.2ch.net/test/read.cgi/bsoft/1319313721/

98 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:46:04.08 ]
ない
場違い承知・まともな回答返ってこない前提でここかパワポVBAスレッドで聞いてアレンジするか
ググって見つかる掲示板利用するしか

99 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:48:36.97 ]
(*ノノ)イヤン

100 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:51:41.95 ]
>>95
>おっぱい見せて
さろんへ行け。

101 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:51:42.53 ]
VBEで入力した全角文字が片っ端から自動で確定されて日本語入力できないんですが、仕様ですか?

102 名前:デフォルトの名無しさん [2012/02/07(火) 21:11:34.07 ]
>>97-98 ありがとう、ダメ元ですがエクセル場合はこーする、でも構わないので聞いてみます。
検索対象文字列の手前に改行を入れる、というVBAをつくろうとしています。

物:いちご物:みかん物:バナナ

となってる文章を

物:いちご
物:みかん
物:バナナ

と整形したいため、「物:」を検索し、その手前で改行を入れるVBAを作りたいです。
以下は自分で作ってみたものの、物:そのものを消して改行を3発入れてしまう駄作です。
Sub 検索()
With Selection.Find
.Text = "物:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWildcards = True
Do While .Found = True
If .Execute(FindText:="物:", Forward:=True, Format:=True) = True Then
         Selection.TypeParagraph
         Selection.TypeParagraph
        Selection.TypeParagraph
Else
End If
Exit Do
Loop
End With
エクセルならこーする、ワードは知らん。でも構いませんのでご教示頂けると幸いです。

103 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:24:17.08 ]
Selection.TypeParagraphが三つあるから改行がみっつ入るんじゃないのか?
それひとつにしてそのあと"物:"追加すればいいんじゃね

つか物:を置換してマクロ記録すればすぐわかるような


104 名前:デフォルトの名無しさん [2012/02/07(火) 21:36:32.82 ]
>>103
回答ありがとうございます。
例で出したソースは例えで、「物:」実際は数字や日付、名前のような動的なものが入ります。
なので静的に「物:」を後から足すという手法が使えません。
さらに、実際は改行は1発ではなく、間に3行欲しいので3発入れる必要があります。

例えが下手で申し訳ありません。



105 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:48:44.82 ]
データの整理をVBAで行うことを考えている初心者です
VBAを試しに書いて実行してから保存をしてみたところ、VBAによって行われたシート側の改変まで保存されてしまうようなのですが、
コードの部分だけを保存する方法はないでしょうか?

106 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:51:57.10 ]
>>93
斜め上から

Sub 等差数列()
  Range("B5") = Range("B3")
  Range("C5") = Range("B3") + Range("C3")
  Range("B5:C5").AutoFill Destination:=Range("B5:G5")
End Sub


107 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:57:15.58 ]
>>105
VBAを行うファイルとデータファイルとを別々にスレばいい。
今は同じブック内でやってんでしょ?

108 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:59:38.02 ]
>107
なるほど、それは盲点でした
どうもありがとうございます

109 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 22:15:08.83 ]
>>106
オートフィルメソッドなんか使わんでも数式は代入だけでコピーできる

Sub 等差数列()
 Range("b5") = "=b3"
 Range("c5:g5") = "=b5+$c$3"
End Sub

さらに短かく

Sub 等差数列2()
 Range("b5:g5") = "=$b$3+$c$3*(column()-2)"
End Sub

110 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:20:14.94 ]
>>109
それ 94 の方法でしょ

111 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:50:08.62 ]
>>102
>>97
または
mougでもいけばいいんじゃない

With Selection.Find
Replacement.ClearFormatting
.Text = "物"
.Replacement.Text = vbCr & "物"
.Execute Replace:=wdReplaceAll
End With

112 名前:デフォルトの名無しさん [2012/02/08(水) 00:33:54.14 ]
>>95,>>106,>>109,>>110
の方々、ありがとうございます。とても助かります。
もうひとつ質問があるのですが、
・選択したセル範囲に対して、
   a.空白セルの場合には背景色を黄色( RGB(255,255,0) )にする
   b.空白でないセルの場合は背景色を色なし( xlColorIndexNone )にする
 マクロ「チェック」を書きたいのですが、どのようにすればいいのでしょうか。

113 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:01:53.56 ]
>>112
順番は逆だが気にするな
中学か高校の情報の授業なんだろうが先生が期待している回答ではないかと

Sub チェック()
With Selection
  .Interior.Pattern = xlNone
  .SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 255, 0)
End With
End Sub


114 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:16:33.90 ]
>>112
Sub チェック()
  Selection.Interior.Color = -4142
  Selection.SpecialCells(4).Interior.Color = 65535
End Sub



115 名前:デフォルトの名無しさん [2012/02/08(水) 04:11:01.60 ]
>>111
スレチの質問にヒントありがとうございます。
しかし実際は>>104なので、"物"とすることができません。
具体的には2ちゃんのレス番、名前欄手前に3つ改行を入れたいのです。

Sub TEST()
With Selection.Find
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True

.Text = "[0-9]{1,3} :* ??:??:??.?? ID:????????"
.Replacement.Text = vbCr & vbCr & vbCr & "ここに何か".
.Execute Replace:=wdReplaceAll
End With
End Sub

検索結果をそのまま持ってくるような関数は無いでしょうか?
上記"ここに何か"部分にそれを入れれば上手く動きそうな気がします。

116 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 07:28:55.58 ]
>>115
>>97

117 名前:デフォルトの名無しさん [2012/02/08(水) 16:02:40.64 ]
>>113,>>114
ありがとうございます!

118 名前:デフォルトの名無しさん [2012/02/08(水) 16:14:10.84 ]
>>116
ありがとうございます。>>111さんに教えて頂いたmougにて有用な回答を得て解決出来ましたので
エクセルでも応用が利くかもしれないので、方法を貼っておきます。

.Replacement.Text = "^p^p^p\1"

とすることで、\1が置換後の文字列をそのまま使ってくれる事を教わりました。
これで解決することが出来ました。

以上です。ご回答頂き本当にありがとうございました。

119 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 23:04:47.66 ]
お邪魔します。
OS:WinXP-SP2
Ver:Excel2002です
目的:シートAとBの特定範囲を一括して印刷プレビュー

Sheets(Array("A", "B")).Select
Range("A1:F59").Select
Selection.PrintPreview
Sheets("C").Select

と入れてシートAとBのA1:F59の印刷プレビューを開きたいのですが
この命令を実行するとシートAのA1:F59のプレビューしか開けません。
シートAとBを一括してプレビューさせるには何が足りないのでしょうか?

120 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 23:58:52.00 ]
>>119
ActiveWindow.SelectedSheets.PrintPreview

121 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 00:17:23.02 ]
>>119
Worksheet オブジェクト(普通のシート)には PrintPreview メソッドが存在する、よってシートを選択してプレビューできる
sheets オブジェクト(複数のシートを保持できる)には PrintPreview メソッドが存在する、よって複数のシートを選択してプレビューできる
range オブジェクトには PrintPreview メソッドが存在する、よって範囲を選択してプレビューできる
range オブジェクトは同一シート内なら複数の範囲を保持できる、よって同一シート内なら複数の範囲をプレビューできる

ただし、Excel には複数のシートをまたがる複数の Range を保持できるオブジェクト自体が存在しない
そのため、それに対応する PrintPreview メソッドも存在しない

たぶん

122 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 00:36:45.70 ]
>>119
PageSetupを変更して良いなら
↓はどう?

Sheets("A").PageSetup.PrintArea = "A1:F59"
Sheets("B").PageSetup.PrintArea = "A1:F59"
Sheets(Array("A", "B")).PrintPreview

123 名前:119 mailto:sage [2012/02/09(木) 11:32:11.25 ]
>>120-122
ありがとうございました。
最終的にこうなりました。

Sub 印刷プレビュー()
'セルB55の数値からシート印刷か部分印刷かを判断
If Range("B55") <> "" Then
'B55に数値が存在するならばシート印刷
Sheets(Array("請求書", "見積書")).PrintPreview
Else
'B54に数値が存在しなければ部分印刷
Sheets("請求書").PageSetup.PrintArea = "A1:F59"
Sheets("見積書").PageSetup.PrintArea = "A1:F59"
Sheets(Array("請求書", "見積書")).PrintPreview
'印刷範囲を初期化
    Sheets("請求書").PageSetup.PrintArea = "A1:F119"
Sheets("見積書").PageSetup.PrintArea = "A1:F119"
End If
End Sub

124 名前:デフォルトの名無しさん [2012/02/09(木) 17:07:00.03 ]
Dim 変数 as Range
このようにオブジェクト変数を使いセルを代入すると
その情報の中にそのセルの上位のシートやブックも一緒に保存されてるんですか?



125 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 18:46:47.98 ]
>>124
たしかParentプロパティとかに入ってたと思う。

126 名前:124 [2012/02/09(木) 19:08:28.56 ]
Parentプロパティって何でしょうか?
つまりそのRange型変数には入ってるってこと?

その特定のセルの場所を保存するには
ブック型変数(Dim〜as Workbook)、シート型変数(Dim〜as Worksheet)、セル型変数(Dim〜as Range)の3つが必要かと思ってたけど
セル型ひとつで済むならかなり楽だけど、違うのかな?

127 名前:125 mailto:sage [2012/02/09(木) 19:41:53.50 ]
たとえば、こんな風にやってみると
レンジ型変数からシート名とブック名も取得できる
でもこんなことするより
シートやブックもオブジェクト変数に代入しちゃう方が早くないか?

Sub test()
Dim Rng As Range
Set Rng = ThisWorkbook.Sheets(1).Cells(1, 1)
Debug.Print Rng.Parent.Name
Debug.Print Rng.Parent.Parent.Name
End Sub

128 名前:125 mailto:sage [2012/02/09(木) 19:49:11.26 ]
>>126
ごめん、後半読んでなかった
セル範囲の指定をRange型変数ひとつでできないか、という話だったのね。
Range型変数に代入されたセル範囲はRange型変数だけで特定できるから
そういう意味ではWorkBook型やWorkSheet型の変数は不要だよ。

てっきりブックやシートの指定もレンジ型一つで全部済ませたい
ってことかと思ってたよ
(>>127で書いたとおりそれもできることはできるけど、
記述が長くなるからあんまりメリットを感じない。)

129 名前:デフォルトの名無しさん [2012/02/09(木) 22:17:32.76 ]
バイナリファイルを読み込んでデータの中の文字列を探したいと思ってます。
バイト配列と文字列を比較するためにしなくてはいけないのですが、
型を合わせる方法がわかりません。 バイト配列から文字列、また
文字列からバイト配列に変換する方法を教えてください。

よろしくお願いします。

130 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:42:11.88 ]
>>129
バイナリファイルを文字列に変換して処理する例(すべてのバイトをを &H0000〜&H00FF のUnicode文字として変換)

Const adTypeBinary = 1
Sub Foo()
 bin = LoadBin("D:\misc\a.txt")
 n = GetBinSize(bin)
 Text = ""
 For i = 0 To n - 1
  Text = Text + ChrW(CodeAt(bin, i))
 Next
 index = InStr(Text, ChrW(&HFF))
 MsgBox "最初に見つけた &HFF の位置: " + CStr(index)
 index = InStr(Text, "hello")
 MsgBox "最初に見つけた hello の位置: " + CStr(index)
End Sub
Function LoadBin(path)
 Set stm = CreateObject("ADODB.Stream")
 stm.Type = adTypeBinary
 stm.Open
 stm.LoadFromFile (path)
 LoadBin = stm.Read()
 stm.Close
End Function
Function GetBinSize(bin)
 GetBinSize = LenB(bin)
End Function
Function CodeAt(bin, index)
 CodeAt = AscB(MidB(bin, index + 1, 1))
End Function

131 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:44:26.34 ]
>>129
>ANSI 形式のバイト型配列を文字列に変換する場合は、StrConv 関数を使用してください。
>Unicode 形式の配列を変換する場合は、代入式を使用してください。
以上 StrConv 関数のヘルプから

それ以外の文字コードだった場合はVBAだけで簡単にやる方法は多分ない

132 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:19:32.83 ]
文字コードによるけど、バイナリファイルだって最初っからテキストモードでオープンすりゃええがな

133 名前:126 [2012/02/10(金) 00:29:11.59 ]
>>127>>128
すばらしい解説ありがとうございます。
なるほど、Rangeでもシートやブックの情報を裏で持ってたんですね。
頭スッキリしました。
こういうスッキリ感がプログラムという複雑化しやすいことを扱うにはものすごく重要ですしね。
ということはRangeのオブジェクト変数はものすごく便利ですね。

134 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:53:51.04 ]
間違ってた
○ChrW
×Chr



135 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:55:28.19 ]
>>134>>130についてです

136 名前:129 [2012/02/10(金) 01:23:07.49 ]
>>130>>134>>135
具体的なサンプルありがとうございます。
SJISの場合はChrでUTFの場合はChrW
を使えばよいのでしょうか?

>>131
たしかSJISだったと思うのでStrConvを使えば
比較できるということですね。
ヘルプを確認してみます。

>>132
テキストモードでオープンすると正しく取得できない
値があるのでバイナリモードでオープンする方法を検討しています。

137 名前:130 mailto:sage [2012/02/10(金) 01:44:11.61 ]
>>136
>SJISの場合はChrでUTFの場合はChrW
違う
ChrWは単なる間違い

130の例で Shift_JIS の "あ" を検索したいなら、
Chr(&H82) + Chr(&HA0)
を検索する必要がある
面倒だけど、その代わりバイト並びさえ分かっていれば変換による情報落ちの心配なしにどんなコードでも処理できる、という例

138 名前:デフォルトの名無しさん [2012/02/10(金) 11:13:23.28 ]
VBAの基本的な文法はマスターしたのですが
Error処理のしかた
プロシージャのCallの呼び方
きれいなコードの書き方
イミディエト窓の使い方
バグフィックスのしかた

など、普通の入門書にはほとんど書かれていないこともマスターしたいです
そのためのいい本はありますか?

139 名前:デフォルトの名無しさん [2012/02/10(金) 13:05:03.46 ]
これは正しいですか↓

-------------------------------------------------
LoadするとInitializeイベントが発生して、
ShowでActivateイベントが発生する。
HideするとDeactivateイベントが発生して、
UnloadでTerminateイベントが発生する。

LoadしないでShowすると自動的にLoadされてShowするし、
HideしないでUnloadしても自動的にHideされてUnloadする。


140 名前:デフォルトの名無しさん [2012/02/10(金) 13:07:14.91 ]
>>139
神!

こういう整理された情報こそ実用的であり非常に有用。
みんなも>>139みたいな情報を共有しあうために貼り付けようじゃないか!

141 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:34:27.98 ]
すくなくとも
>ShowでActivateイベントが発生する。
>HideするとDeactivateイベントが発生して、
は正しくない
Showした結果アクティブになればActivateイベントが発生するし
Hideした結果アクティブじゃなくなればDeactivateイベントが発生する
HideしたからってかならずDeactivateが発生するわけじゃない

142 名前:デフォルトの名無しさん [2012/02/10(金) 14:42:14.40 ]
Workbooks(x)のxを
そのworkbookの名前から取り出す方法を教えてください。

143 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 15:20:21.90 ]
取り出す必要なんてない。

144 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 16:14:52.80 ]
>>142
WorkbookオブジェクトにはIndexプロパティがないので直接求めるのは無理
Workbooksコレクションをループで順番に見ていくしかない

けど>>143の言う通り、インデックス番号なんかわからなくてもプログラムは書ける
何がやりたいの?



145 名前:142 [2012/02/10(金) 16:31:35.11 ]
長いコードを短くしたいの。

146 名前:デフォルトの名無しさん [2012/02/10(金) 16:33:32.37 ]
コピペをVBAコードて書く場合、
なぜ対象オブジェクトはシートなんですか?
普通に考えてセルであるべきだ。
納得される説明・理由が聞きたいのですが。

147 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 17:11:39.81 ]
>>145
短くしたいなら、
dim book as workbook
set book = workbooks("bookname.xls")
'以降bookを使ってコードを書く

の方が良くない?

148 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 17:34:20.86 ]
>>145
それならオブジェクトを変数に入れた方がいい
短くなるだけでなく、処理も少し軽くなる
具体例は>>147

コードを短くする方法はいくつかあって、Withを使うのも効果的

149 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:10:47.12 ]
>>146
そんなことをここで聞かれてもな
マイクロソフトに聞け

ただ、おまえが普段どんなコードでコピペしてるかしらんが
少なくとも俺はコピーするときはRangeが対象なことがほとんどだし
Rangeに張りつけたければPasteSpecialも使えるぞ

150 名前:デフォルトの名無しさん [2012/02/10(金) 19:38:29.05 ]
VBAでVLOOKUPのようなことをしたい場合どうしてますか?

151 名前:デフォルトの名無しさん [2012/02/10(金) 19:41:55.38 ]
VBAで改行を文字列にするにはどうすればいいですか?

152 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:49:24.89 ]
>>150
あなたはどうしてますか

153 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:50:09.64 ]
>>151
ん?

154 名前:デフォルトの名無しさん [2012/02/10(金) 19:57:04.82 ]
>>152
使い方をしらないからまだ使ったことない。
>>151
vbLINEかvbCRみたいなのなかったっけ?

VBAでワークシート関数を使いたいとき、Application.WorkSheetFunctionを使えばいいと書いてあるけど
どんな関数でもVBAでも使えるのですか?
さらにWorkSheetFunctionのあとは単にワークシート関数の単語を書けばいいだけ?



155 名前:デフォルトの名無しさん [2012/02/10(金) 20:04:05.38 ]
ワークシートとVBAで混乱するもの

FindとInstr
TextとFormat
DateとToday
その他多数

これみんなどうやって記憶してるの?

156 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:08:37.99 ]
>>150
VBAでもVLOOKUP関数は普通に使える






[ 続きを読む ] / [ 携帯版 ]

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

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