Excel VBA 質問スレ Part14at TECH
Excel VBA 質問スレ Part14 - 暇つぶし2ch809:デフォルトの名無しさん
10/03/22 18:36:00
PCを窓から捨てる

810:デフォルトの名無しさん
10/03/22 18:42:57
>>809 (´・д・`)窓からPC捨てたら、VBAが学べるの?

811:デフォルトの名無しさん
10/03/22 20:21:37
>>805-806
同感
しかしクソIME(Microsoft Office IME 2007)は上の「どうかん」が変換できないよ。
他にも辞書登録しないと駄目なのがいっぱいあるが中国人に作らせたんじゃないだろうな。

812:デフォルトの名無しさん
10/03/22 20:42:03
2chとかに書き込む時はgoogleのが便利なのに(´・ω・`)
最近はちょっと軽くなったし

813:デフォルトの名無しさん
10/03/22 20:42:20
中国人だよ。

814:デフォルトの名無しさん
10/03/22 21:32:01
テスト同感
>>812
Googleの日本語入力があるなんて知らなかったよ。
今ダウンロードして使ってる。
いいこと聞いたよ。
>>813
アチャー、中国神社無理もないな。
うーん、Googleも完璧じゃないな。


815:デフォルトの名無しさん
10/03/22 23:55:19
>>808
手段と目的が逆転した時は、まず目的を探せ

816:デフォルトの名無しさん
10/03/23 00:36:44
「入門書はクリアしたので次のステップは何がよいでしょうか」
という問いかけかもしれん

817:デフォルトの名無しさん
10/03/23 02:13:17
>>816
じゃあやっぱり目的を探せであってるんじゃないか?

818:デフォルトの名無しさん
10/03/23 07:08:47
じゃあ次は中級の本を読めばいいんじゃね?

819:デフォルトの名無しさん
10/03/23 13:54:18
Cells(3,5*i-2)からCells(k,5*i+1)まで
というように行位置と列位置で指定した範囲をコピペしたい場合
何かいい方法ありますか?

行位置と列位置からセル番地を求めて
Range("○○:××")って形で指定くらいしか思いつかないんですが

820:デフォルトの名無しさん
10/03/23 13:57:09
>>819
CellsはRangeの範囲指定にそのまま使える。
Range(Cells(3, 5 * i - 2), Cells(k, 5 * i + 1)) と書けばいい

821:デフォルトの名無しさん
10/03/23 14:15:50
>>820
ありがとうございます!

822:デフォルトの名無しさん
10/03/24 03:18:22
教えてください。

office 2000、Win XP SP3です。

このようなことはできるでしょうか?
・マウスでセルをクリックすると、そのセルに、色が付くとか、あるいは●の文字が出る。
・もう一度そのセルを押すと、色が無くなる(白になる)とか、あるいは文字が消える。
セルを、まるでチェックボックスに見立てたような動作です。

通常のチェックボックスをシート上に置けばよいのでしょうが、
行単位で、それぞれにチェックを付けたいのです。
そうすれば、行の挿入や削除したとき、チェックボックスも一緒に増減するからです。

このようなことがVBAでできるでしょうか?
宜しくお願いします。


823:デフォルトの名無しさん
10/03/24 04:05:05
>>822
無理。
Worksheet_SelectionChange、Worksheet_BeforeRightClick、Worksheet_BeforeDoubleClickなどで
代用する手はあるけど希望通りの動作にならなかったり副作用が出たりする。

824:デフォルトの名無しさん
10/03/24 04:13:30
セルのクリックってWin32APIでできそうなんだけどなあ。
需要もあると思うんだけど、検索しても見つけられないんだよな。

825:デフォルトの名無しさん
10/03/24 08:07:38
2003 XPです

Sub デイデータ制御()
Worksheets("水産").Cells(5, 2).Select
End Sub

これを同じブック・違うシート上でやると実行時エラー1004が出ます。

あと、activate とselect って何が違うんですか?

826:デフォルトの名無しさん
10/03/24 09:37:56
>>825
activeは範囲選択したときのtabの動作
selectは左クリックで操作したときの動作
selectの方が早くて不具合も少なかったと思う

後マクロはシート1に
Sub Macro1()
Call デイデータ制御
End Sub

標準モジュールに
Sub デイデータ制御()
Worksheets("水産").Select
Range("a1").Select
End Sub
と記述する。別シートを洗濯できないのはスコープの問題。
とりあえず簡単に、別シートのマクロは記述できないと覚えて置けば良い

それでもWorksheets("水産").Cells(5, 2).Selectと一度に記述ができないのは何でだったかな
忘れた。

827:デフォルトの名無しさん
10/03/24 14:34:19
>>826
回答ありがとうございます。
一度に記載出来ないのは仕様だったのね・・・

828:デフォルトの名無しさん
10/03/24 16:56:07
自動整形をやめる方法ってありますか?
*はスペース
hoge*=*1
hogehoge*=*1
でなくて
hoge*****=*1
hogehoge*=*1
って揃えたいんですが


829:デフォルトの名無しさん
10/03/24 18:17:14
FUNCTIONで関数を作っったら、ユーザー関数として使えるのでしょうか?
本では使えるようなことが書いてあるのですが、
関数の挿入のWINDOWでユーザー関数の項目が出てこないので選べません。
エクセルは2003で、超超・・(略)・・超初心者です。

830:デフォルトの名無しさん
10/03/24 21:55:11
とりあえず、>>1-7見ような

831:デフォルトの名無しさん
10/03/25 00:48:52
>>828
無理

832:デフォルトの名無しさん
10/03/25 00:50:37
特定の文字列が含まれているシートの特定のセルを参照して、それをフォームに一覧表示したいです。
すべてのシートから参照する方法は分かったのですが、特定の文字列を含むシートのみを抽出する方法が
分かりません。
なにとぞお願いします

833:デフォルトの名無しさん
10/03/25 00:51:13
>>829
使える
出てこないのはたぶんFunctionを書く場所が間違ってる

834:デフォルトの名無しさん
10/03/25 00:52:09
>>832
Find

835:832
10/03/25 01:31:19
すいません、具体性が足りませんでした。申し訳ないです。

例えば、○○○、□□□、○○○1、○○○2というシートがある時、
○○○が含まれる3つのシートのC1の値を参照し、一覧にしてフォームに表示させたいのです。
私としては、foreachを使っていけば良いんじゃないかと思って考えてはいるのですが、具体的な形に
ならないものではまって動けないという感じです。

知恵をお貸し下さい。お願いします。

836:デフォルトの名無しさん
10/03/25 01:51:53
URLリンク(officetanaka.net)

837:832
10/03/25 02:06:29
ヒントありがとうございます。また頑張ってみます。

838:デフォルトの名無しさん
10/03/25 16:41:54
ボタンをクリックして表示させるフォームに引数って渡せないでしょうか。
クリックしたボタンによって違う処理をしたいんですが、引数を渡せないと大量の同じようなフォームをできてしまうのでそれを避けたいのですが…

839:デフォルトの名無しさん
10/03/25 18:07:16
継承が使えればformを継承し新しいクラスを作る
もしくはshow関数をオーバーロード
もしくはグローバル関数を使う
もしくはテキトーなtextboxに値でもいれておき、それを参照するようにする
下に行くほど簡単。どれでも好きなものを

840:デフォルトの名無しさん
10/03/25 18:16:40
excel2007で質問させてください。

各シートから条件に一致したデータを抽出して印刷しようとしています。
印刷ひな形となるシートのコピーを作成して
そのコピーしたシートにデータを書き込んで印刷→シート削除という流れなのですが
worksheets(hoge).copyを使用すると
Application.ScreenUpdating = falseにしていても
画面遷移が起こってしまいます。
画面遷移なしで処理したいのですが何か他に方法はありますか?

ひな形シートの全セル選択で貼り付けると印刷設定が移動できませんし
印刷設定のプロパティも全部コピーしていくしか無いのでしょうか


841:デフォルトの名無しさん
10/03/26 02:13:27
ちょっとVBAに慣れると調子に乗って
ExcelベースのGUIで便利なアプリにしてやろうなんて
夢想しがちだが、肝心な機能の呼び出しが非公開だったり
することが多くて失敗しやすいね

842:デフォルトの名無しさん
10/03/26 05:24:58
>>840
印刷設定のコピー方法はプリンターの機種ごとに違ってて、そう簡単にはコピーできなかったと思う

843:デフォルトの名無しさん
10/03/26 09:41:04
  ←→
┌───┐┌───┐
└───┘└───┘

上のような感じで複数のセルの中から値の入力されてるセルの上端に双方向矢印を入力させるというマクロを作りたいのですが
可能でしょうか?双方向矢印を引くだけならマクロの記録を使ってできるのですが値のあるセルだけにという条件をくわえるにはどうしたらいいでしょうか?
どなたか教えてください。




844:デフォルトの名無しさん
10/03/26 13:18:35
>>843
こんな漢字?
Sub a()
Set d = UsedRange
For Each s In d
If s.Value <> "" Then
s.Offset(-1, 0).Value = "←→"
End If
Next
End Sub

845:デフォルトの名無しさん
10/03/26 13:58:50
>>844
うまく説明できてなくてすみません。。

例えばA1からD9までの範囲があったとしてそこの中のセルに値があるものだけを検索して
図形の双方向矢印をセルの上端の線に合わせて入れたいんですが可能でしょうか?


846:デフォルトの名無しさん
10/03/26 17:26:23
>>839
グローバル関数でいけました。ありがとうございました

847:デフォルトの名無しさん
10/03/26 21:14:29
>>843
やりたいのはこんな感じ カナ?カナ?
Dim Sh As Worksheet
Dim r As Range
Dim X1 As Integer
Dim X2 As Integer
Dim Y1 As Integer
Dim Y2 As Integer

Set Sh = ActiveSheet

For Each r In Sh.Range("A1:D9")
  If r.Value <> "" Then
    With r
      X1 = .Left
      Y1 = .Top
      X2 = X1 + .Width
      Y2 = Y1
    End With
    With Sh.Shapes.AddLine(X1, Y1, X2, Y2).Line
      .BeginArrowheadStyle = msoArrowheadTriangle
      .EndArrowheadStyle = msoArrowheadTriangle
    End With
  End If
Next

848:デフォルトの名無しさん
10/03/26 22:49:43
>>847
ありがとうございます!!まさにそのとおりです。
ちなみに矢印を上端の中心に持ってきて左右の長さを縮めたいのですが・・・
 

    ←→     .←──→
┌───┐┌───┐
└───┘└───┘
 今のままでは右のようになるので左の図のようにしたいと考えてまして
そういった方法の指定も可能ですか?

849:847
10/03/26 23:18:03
>>848
可能

 Rangeオブジェクトのプロパティ
 Left Top Width Height

後はヘルプを見るなりして がんばってみてね

850:デフォルトの名無しさん
10/03/26 23:27:15
色んなことをやりたい人がいるんだな

851:デフォルトの名無しさん
10/03/26 23:35:17

このスレはVBAとPerl14

のスレなのになぜPerlネタが一切でてこないんだ?



852:デフォルトの名無しさん
10/03/26 23:49:26
次の質問どうぞ

853:847
10/03/27 19:33:47
>>843
もう見てないかもしれないけれど

>>847のコードは
型宣言を 勘違いしてたみたい

変数 X1 X2 Y1 Y2 は Single型もしくはLong型で宣言するべきだった
Integer型だと少数点以下がカットされるので線が少しずれてる

さっきヘルプを見ていて気づいた
ゴメンね

854:デフォルトの名無しさん
10/03/28 03:21:33
シェイプ関連の位置指定は、ポイント単位だからなあ。
て、Longも駄目だろw

855:847
10/03/28 10:55:03
>>854
がーーーん
またまたすみません
たっ たしかにそうでした
回答者に向いてないかも俺

さすがに落ち込みました

856:デフォルトの名無しさん
10/03/28 11:02:37
ドンマイ。よくあることだw

857:デフォルトの名無しさん
10/03/28 21:05:10
質問です。
CSVファイルをエクセルブック内のワークシートに貼り付けするとき、

Workbooks.Open Filename:=csvfile
Workbooks(csvfile).Worksheets.Copy after:=Workbooks(mybook).Worksheets("ファイル一覧")
Workbooks(csvfile).Close

こんな感じで簡単に貼り付けています。
csvファイルが5MBとかサイズが大きくても上のようなやり方で問題ないでしょうか。
csvファイルの先頭から1レコードずつ取得して貼り付けるという方法もネットから探し出せたんですが
どっちがいいのか判断しにくいです。

858:デフォルトの名無しさん
10/03/28 21:07:57
ExcelVBA開発がメインの人っているの?
趣味とか、基本的にはVBとか、やけにできる事務員とか、そんな感じですか?

859:デフォルトの名無しさん
10/03/28 21:21:12
自称やけにできる事務員ですw

860:デフォルトの名無しさん
10/03/28 21:35:38
英単語が並べられている列があり、隣の列に意味を書き出す、というのを作っています。
使用する英語の辞書のURLはURLリンク(www.alc.co.jp)です。
「apple」という単語を検索するとURLは
URLリンク(eow.alc.co.jp)
となります。
ここで、英単語を検索した結果表示されたページから該当箇所を抜き出すというやり方が分かりません。
上記の「apple」の場合、「・apple」から「分節ap・ple」まで抜き出したいのです。
やり方がわかる方教えてください。



861:デフォルトの名無しさん
10/03/28 22:09:20
>>860
* データの転載は禁じられています。
class="midashi"

862:デフォルトの名無しさん
10/03/28 22:25:22
>>857
5MBのCSVなんて動作遅くならないか?
速さをなんとかしたいならsqlでやる。

863:デフォルトの名無しさん
10/03/29 00:28:17
>>860
VBA上から Webページのデータを取得するのは
そのWebページのソースを見て理解できないと無理
(そしてそれをどうVBA上からコントロールするかも)

ソースをみたけど
<DIV class=mr_10 id=resultList ondblclick=seow()>
ってのがあるから
id=resultList ←これを利用すれば

「・apple」から「《コ》アップル・メニュー」
までは抜き出せるね
あとはタグを辿っていくしかないかな

864:デフォルトの名無しさん
10/03/29 13:57:45
>>858
やけにできる事務員だった
データの正規化やコピーする際に絶対にミスしないのが魅力的
速度自体は大して変わらん

865:デフォルトの名無しさん
10/03/30 10:59:35
1ブック内に複数あるシート全てを選択した状態で、且つ一シート目にのみ開始ページ番号が振られている状態で
印刷したときに割り振られるページ数を、印刷せずにマクロで調べたいのですがどのような方法があるでしょうか?
このシートのこのセルは何ページ目に該当する、ということを調べて行きたいです。
プレビューで見ていけば可能ですがページ数が膨大なのでマクロで処理したいと思っています。


866:865
10/03/30 11:02:54
すいません、バージョンは2000です。

867:デフォルトの名無しさん
10/03/30 13:47:33
>>865
『このシートのこのセル』はそもそもどうやって特定するの?
1シートで印刷するのは複数頁あるってこと?

868:865
10/03/30 16:43:41
>『このシートのこのセル』はそもそもどうやって特定するの?
全シート走査で特定単語を置換していくので、
その置換処理が行われたときのセルを元に出力時のページをその都度
調べてワークファイルに書き出したいと思っています。
(置換処理、書き出す処理はできてます)

>1シートで印刷するのは複数頁あるってこと?
そうです。
1シートに1頁の場合と複数頁ある場合とがあります。


869:デフォルトの名無しさん
10/03/30 20:18:53
特定単語を置換する前に
検索→セル番地取得→セル番地から頁数割り出し
という作業をかませばいいんでないの?

870:865
10/03/30 21:13:16
>>869
「セル番地から頁数割り出し」の部分がわからないんです…

871:デフォルトの名無しさん
10/03/30 21:41:45
一度、印刷プレビューで1頁で何セル印字するのか調べてみたら

872:デフォルトの名無しさん
10/03/30 22:13:52
使った事ないけど

VPageBreak オブジェクト
HPageBreak オブジェクト
なんかどう?

873:872
10/03/30 23:30:03
ちょっとテストしてみたけど 頁数割り出しの参考にならないかな

Sub test()
 Debug.Print "改ページ数:"; ActiveSheet.HPageBreaks.Count

 For Each a In ActiveSheet.HPageBreaks
   Debug.Print "改ページ 行位置:"; a.Location.Row
 Next

End Sub

874:デフォルトの名無しさん
10/04/02 07:24:45
Application.OnTimeでサブルーチンを時間起動したいのですが、
セルをダブルクリックして値入力状態であったり、モーダルで
バルーンを表示させていたりすると、Application.OnTimeに制御
が移らず、サブルーチンを起動できません。
これを回避する知恵をお持ちの方、ご教示願います。

875:デフォルトの名無しさん
10/04/02 16:52:52
回避するって
>セルをダブルクリックして値入力状態であったり、モーダルで
>バルーンを表示させていたりすると、
はどうするねん
別にexcel.applicationを起こしてそっちでontimeさせればええやん

876:デフォルトの名無しさん
10/04/04 19:32:11
XPsp2,EXCEL2003です。

ピボットテーブルをVBAで作成しているのですが、
データによって(件数?)、集計の仕方が、
「個数/金額」になったり、「合計/金額」になったりします。
常に「合計/金額」になるようにするには、どうすれば良いのでしょうか?

コードは次の通りです。

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"ZZZWORK!R5C" & c_yymm_p & ":R" & lastrow & "C" & c_io_p).CreatePivotTable TableDestination:="", TableName:= _
"ピボットテーブル4", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("ピボットテーブル4").ColumnGrand = False
ActiveSheet.PivotTables("ピボットテーブル4").AddFields RowFields:=Array("分類", "科目") _
, ColumnFields:="年月"
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _
xlDataField
Application.CommandBars("PivotTable").Visible = False
ActiveWorkbook.ShowPivotTableFieldList = False

よろしくお願いします。



877:デフォルトの名無しさん
10/04/05 02:29:05
>>876
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Function = xlSum

878:876
10/04/05 08:04:46
>>877
レスありがとうございます。

そのコードを追加したら、

実行時エラー'1004':
PivotFieldクラスのFunctionプロパティを設定できません。

になりました。どうすれば良いのでしょうか?

追加した位置は、下記のステートメントの次です。

ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _
xlDataField

よろしくお願いします。

879:デフォルトの名無しさん
10/04/05 12:28:18
>>878
フィールド名の「金額」の部分を自分の作ったテーブルに合わせて書き換える
テーブルの一番左上の灰色のセルの値を見る

880:878=876
10/04/05 17:07:07
>>879
レスありがとうございます。

常に合計になるようにできましたm(_ _)m

881:デフォルトの名無しさん
10/04/05 18:37:42
サブメニューを複数個作りましたが、
どのサブメニューを選択しても、同じSubプロシージャを呼び出したいです。

Subプロシージャ側で、どのサブメニューが選択されたかを知るにはどうすればいいでしょうか?
パラメーターとか使えますか?

参考になるサイトがありましたら紹介していただけませんか。


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