Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


221 / 3841 ページ ←次へ | 前へ→

【78027】Re:フッタのフォントサイズを取得するには
質問  ふるった  - 16/3/8(火) 9:59 -

引用なし
パスワード
   独覚さん

返事ありがとうございます。

一部ドキュメントのフッタにシート名が設定されている事が判明し、
ファイル名に統一することになりました。

PageSetup.LeftFooter = "&10 &F"
と指定すればフォントサイズ10で左フッタにファイル名を設定できる所までは
できているのですが、全てのドキュメントがサイズ10で固定されてしまい、
一部中央フッタと被るのです。

そこで現在のフォントサイズを維持したまま
フッタをシート名からファイル名に変更したいのです。
(シート名長さとファイル名の長さが同じため、
サイズを維持すれば被らない。
ただし、フォントサイズはドキュメント毎に異なる)

現在のフォントサイズを維持する事を目的に、現在のフォントサイズを変数に
引っ張り込みたいのですが、なにか良い案はないでしょうか?

よろしくお願い致します。
・ツリー全体表示

【78026】Re:フッタのフォントサイズを取得するには
発言  独覚  - 16/3/8(火) 9:29 -

引用なし
パスワード
   ▼ふるった さん:

以下はマクロの記録で記録したものです。
(該当部分のみ)
左側に「aaaa」と入力し、斜体で文字サイズを「10」に、真ん中に「aaa」と入力、
文字サイズを「72」に、右側に「aaaaa」と入力文字サイズは変更せず(規定)。

>  With ActiveSheet.PageSetup
>    〜
>    .LeftFooter = "&""-,斜体""&10aaaa"
>    .CenterFooter = "&72aaa"
>    .RightFooter = "aaaaa"

さらに
Sub a()
  MsgBox Worksheets("Sheet1").PageSetup.LeftFooter
  MsgBox Worksheets("Sheet1").PageSetup.CenterFooter
  MsgBox Worksheets("Sheet1").PageSetup.RightFooter
  
End Sub

&"-,斜体"&10aaaa
&72aaa
aaaaa
と表示されました。

どうも文字サイズを変更した場合はフッターに設定した文字の頭に「&サイズ」そがつくようです。
また、フッターに数字が設定された場合は
&10 123
のようにフッター文字とサイズの間にスペースが入るようです。

その他の設定などはマクロの記録で確認してみてください。

ヘルプでの説明は
>ブックまたはセクション内の左のフッターで、文字列の配置を取得または設定します。
だけでした。
・ツリー全体表示

【78025】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/7(月) 20:59 -

引用なし
パスワード
   ▼真田● さん:

>エラーになった時の処理

βさんの最初の回答にあるように
WorksheetFunction.VLookUp
だと、マクロがエラーで止まっちゃうので、
Application.VLookUp
を使用しているのがポイントです。

他の掲示板ですが
ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=174828&rev=0
ここのappleさんの 2016/03/04(22:02 の説明を読んでみてください


>VBAではVLOOLUPは使わない方が良いと言ってる人がおいようですが

ごめんなさい。わたしにはわかりません。
というか、vlookupが使えるものなら積極的に使います。
vlookupに限らず、ワークシート関数を使うことにためらいはありません。

でも、先のコードが希望の動作であるなら、
やはり今回のようなケースでマクロを使う必要はないと思います。

コードを書いてみたのは、appleさんの説明を試してみただけで、
何度も申し上げていますが、わたしならC列に予めvlookupを入力しておくと思います。
・ツリー全体表示

【78024】フッタのフォントサイズを取得するには
回答  ふるった  - 16/3/7(月) 17:46 -

引用なし
パスワード
   フッタの文字をマクロで変更したいのですが、サイズの指定をせずに実行すると
標準サイズに戻ってしまい、中央のフッタと重なってしまいます。
サイズの指定をすれば良いのですが、対象のファイルが大量にあり、
それぞれ最適なサイズが異なります。

現状は最適なサイズが指定されているため、フォントサイズを維持しつつ、
文字のみ変更したいのです。
現在のフッタのフォントサイズを変数に入れ、その変数を指定して
フッタの文字を変更しようとしています。

フッタのフォントサイズを取得する方法をお教え下さい。
・ツリー全体表示

【78023】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/7(月) 16:36 -

引用なし
パスワード
   ▼マナ さん:

ありがとうございます。
完璧でした。

一つ質問なのですが、エラーになった時の処理は
この数式にはどの部分に入っているのでしょうか?


ついでに教えていただけたら幸いですが
VBAではVLOOLUPは使わない方が良いと言ってる人がおいようですが
同じ処理を、エラーの少ない方法で処理することは可能なのでしょうか?
・ツリー全体表示

【78022】Re:ピボットテーブルからの安全なデータ...
お礼  りった  - 16/3/7(月) 11:32 -

引用なし
パスワード
   いただいたサンプルコードをデバッグ実行したら、何やってるかわかりました。
私が考えていたのよりずっと安全です。ありがとうございます。
・ツリー全体表示

【78021】Re:ピボットテーブルからの安全なデータ...
お礼  りった  - 16/3/7(月) 10:06 -

引用なし
パスワード
   回答ありがとうございます。

PivotTablesというのを使うんですね。
Rangeで見に行っているのがそもそも駄目だったんだと思います。
PivotTablesでググって検討します。
参考になりました。ありがとうございます。
・ツリー全体表示

【78020】Re:別ファイルにあるセル範囲を配列に格...
お礼  ayu  - 16/3/7(月) 7:43 -

引用なし
パスワード
   ▼β さん:
お返事遅くなりました。恥ずかしながら、自分が指定したセル範囲が右の方にあり、画面をスクロールしないと見えませんでした。教えて頂いたコードを使って集計してみます。また詰まったら質問させて頂きます。どうもありがとうございました!
>▼ayu さん:
>
>>左側で指定したセル範囲に右側のA2のFormulaをコピーし、
>>右側のセル範囲の値を左側で設定したシートのセル範囲にコピーする
>>ということであってますでしょうか?
>
>A2のFormula というのが、ちょっと変ですけど、以下のようなことです。
>
>たとえばステップ実行はご存じでしょうか。
>VBE画面で、Sample2 の任意のところをクリックしてF8 を押します。
>最初は Sub Sample2() が黄色くハイライトされます。
>で、そのまま F8 を押していきます。
>  shT.Range("A1:F2").Value = shT.Range("A1:F2").Value
>ここが黄色くなったら F8を押さず、マクロブックの "転記先のシート名" をみてください。
>この A1:F2 に、元ブックを参照する参照式が入っています。
>
>式と表示されている値を確認したら、VBE画面に戻り End Sub まで F8 を押していって下さい。
>
>Sample がうまくいったということですから、同じ環境(フォルダやブック名やシート名)で実行すれば
>シートに参照式がセットされ、そこで参照している値がシートに表示されているはずなんですが。
・ツリー全体表示

【78019】Re:VLOOKUP関数の検索値を変数にする方法
発言  β  - 16/3/6(日) 18:53 -

引用なし
パスワード
   ▼真田● さん:

>は、このまま使えるVBAなのでしょうか?

いえいえ、サンプルというかコードの雛形というか、考え方です。

>マクロの記録で処理すると原因不明のエラーが出やすいので
>使用は控えたいところです。

そのまま使えることもありますが、それは、例外かもですね。
通常は、固定領域であったり、固定のシートになっていたり
なによりも Select とか Selection がてんこ盛りに生成されますから
お化粧直しをして使います。

でも、コードの雛形を提供してくれるありがたい機能ですよ。

【このまま使えるか】というコメントも、その一端ですけど、
雛形を自分の要件に合わせてチューニングするようにしていかないと
【そのままコピペで自分の要件をカバーして満足すり結果が得られるコード】
だけを求めると、なかなか身につきませんよ。

ということで、以下も【サンプル】です。
新規ブックで試してください。
まず、MakeData を実行してください。I列、J列にリストを作成します。

次にSampleを実行してください。
I列、J列のリスト範囲を自動的に判定取得して、その領域に対して
変数 s で検索をかけています。
最初はリスト内に存在する値、次にリスト内に存在しない値で
VLOOKUPをかけています。

Sub MakeData()
  Dim i As Long
  
  Cells.Clear
  
  For i = 1 To 100
    Cells(i, "I").Value = "a" & i
    Cells(i, "J").Value = "x" & i
  Next
    
End Sub

Sub Sample()
  Dim z As Variant
  Dim s As String
  
  s = "a60"
  
  z = Application.VLookup(s, Range("I1", Range("I" & Rows.Count).End(xlUp)).Resize(, 2), 2, False)
  If IsError(z) Then
    MsgBox s & " は見つかりません"
  Else
    MsgBox "結果は " & z & " でした"
  End If
  
  
  s = "a999"
  
  z = Application.VLookup(s, Range("I1", Range("I" & Rows.Count).End(xlUp)).Resize(, 2), 2, False)
  If IsError(z) Then
    MsgBox s & " は見つかりません"
  Else
    MsgBox "結果は " & z & " でした"
  End If
  
End Sub
・ツリー全体表示

【78018】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/6(日) 18:52 -

引用なし
パスワード
   ▼真田● さん:

ご自身でも仰られたとおりC列に数式を、想定される行数分以上入力しておけば
マクロが不要ではないかという意味です。

マクロで変数を使うとするとこんな感じでしょうか。
商品コード.xlsxは同時に開いているという前提です。

Sub test()
  Dim 検索値 As Range
  Dim 検索範囲 As Range
  Dim 検索結果
  
  With ActiveSheet
    .Range("C2", .Range("C" & .Rows.Count).End(xlUp)).ClearContents
    Set 検索値 = .Range("I2", .Range("I" & .Rows.Count).End(xlUp))
  End With
  
  Set 検索範囲 = Workbooks("商品コード.xlsx").Worksheets("Sheet1").Range("A1:B394")
  
  検索結果 = Application.VLookup(検索値, 検索範囲, 2, False)
  検索値.Offset(, -6).Value = 検索結果

End Sub
・ツリー全体表示

【78017】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/6(日) 17:40 -

引用なし
パスワード
   予め数式を入れるというのは
βさんへの質問の中で書いた

検索結果=Variant型変数

検索結果 = Range("C2", Range("C" & Rows.Count).End(xlUp)).Value

のような数式の事を指しているのでしょうか?

数式の正誤のアドバイスも兼ねて、
βさんへの一番新しい質問を見ていただけると助かります。
・ツリー全体表示

【78016】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/6(日) 17:35 -

引用なし
パスワード
   β さん

教えていただいた内容、だいたい分かってきました。

この数式に問題があるでしょうか?


Variant型変数 = Application.VLookUp(商品コード,[商品コード.xlsx]Sheet1!A$1:B$394,2,FALSE)
  Dim 商品コード As String
  商品コード = Range("I2", Range("I" & Rows.Count).End(xlUp)).Value


If IsError(Variant型変数) Then
Variant型変数=N/S
Else
検索結果=Variant型変数

  検索結果 = Range("C2", Range("C" & Rows.Count).End(xlUp)).Value

End If
・ツリー全体表示

【78015】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/6(日) 16:33 -

引用なし
パスワード
   ▼真田● さん:
>想定できるデータの数以上に
>C列に数式をコピーして入れておけばマクロの記録でも対応できますが

予め数式を入れておけば、マクロはいっさい不要だと思いますが。
・ツリー全体表示

【78014】Re:VLOOKUP関数の検索値を変数にする方法
回答  真田● E-MAIL  - 16/3/6(日) 16:20 -

引用なし
パスワード
   想定できるデータの数以上に
C列に数式をコピーして入れておけばマクロの記録でも対応できますが
マクロの記録で処理すると原因不明のエラーが出やすいので
使用は控えたいところです。
・ツリー全体表示

【78013】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/6(日) 14:03 -

引用なし
パスワード
   ▼真田● さん:
>I列をループして検索したいと思っております
>I2のデータだけを検索するのであれば下の関数で大丈夫ですが
>VLOOKUP(I2,[商品コード.xlsx]Sheet1!A$1:B$394,2,FALSE)
>

>結果は、C列に反映させたいのですが


I2の検索結果をC2
I3の検索結果をC3
I4の検索結果をC4

という意味でしょうか。
ならば、C列にその式を、フィルコピーするだけでは?
・ツリー全体表示

【78012】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/6(日) 13:49 -

引用なし
パスワード
   I列をループして検索したいと思っております

I2のデータだけを検索するのであれば下の関数で大丈夫ですが

VLOOKUP(I2,[商品コード.xlsx]Sheet1!A$1:B$394,2,FALSE)

毎日データが変化するI列全体を検索したいので
検索地を変数で設定したいと思っております。

残念ながら、回答していただいたVBAは理解できないのですが

Variant型変数 = Application.VLookUp(変数,Range("I1:J10"),2,False)
If IsError(Variant型変数) Then
  見つからなかった場合の処理
Else
  見つかった場合の処理
End If

は、このまま使えるVBAなのでしょうか?

お手間取らせて申し訳ございません。

結果は、C列に反映させたいのですが
併せてアドバイスいただけると助かります。
・ツリー全体表示

【78011】Re:シートを顧客ごとに別シートにして見...
お礼  [名前なし]  - 16/3/6(日) 10:08 -

引用なし
パスワード
   ▼β さん:
ごめんなさい;
エクセル学校 質問掲示板にも載せてます。
これから気をつけます。

>▼ヤブヘビ さん:
>
>この掲示板ではマルチポスト許容していますが
>
>マルチポストについて
>別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。
>
>しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。
>
>また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。
>
>こんなルールがあります。
>
>で、学校もマルチ容認ですが、あちらにもそれなりのルールがあります。
>あちらにコメントを書きこんでおきました。
・ツリー全体表示

【78010】Re:シートを顧客ごとに別シートにして見...
発言  β  - 16/3/6(日) 9:27 -

引用なし
パスワード
   ▼ヤブヘビ さん:

この掲示板ではマルチポスト許容していますが

マルチポストについて
別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

こんなルールがあります。

で、学校もマルチ容認ですが、あちらにもそれなりのルールがあります。
あちらにコメントを書きこんでおきました。
・ツリー全体表示

【78009】シートを顧客ごとに別シートにして見やす...
質問  ヤブヘビ  - 16/3/6(日) 8:50 -

引用なし
パスワード
   Excel2007で顧客の管理をしたいのですが、以下の方法がわかりません。
Excelは表を作るくらいしかできません^^;

1枚のシートに以下の表を書き続けています。

A B C D E F G H I J K L M (列)
日付 方法 顧客名 担当者 商品 コード 動き 車種 料金 区間 料金 その他 料金
2/5 TEL カネボウ 木村 蓋 BB 興味あり
mail 日清 田中 ラベル CC 送付
2/6 TEL カネボウ 木村 蓋 BB サンプル出し
TEL サントリー 蓮見 ロゴ TL 依頼あり
2/7 mail 日清 小林 イラスト RB チェック
TEL 日清 田中 ラベル CC 手配あり
2/8 TEL カネボウ 森 ラベル CC 打診あり
来社 サントリー 蓮見 ロゴ TL 選択
mail 日清 田中 ラベル CC 納期
2/9 TEL カネボウ 木村 蓋 BB 保留
TEL カネボウ 木村 ライン RP 依頼あり

これをsheetを分けて、以下のように、管理したいです。
sheet2には、名前を列C-列F(カネボウ‐BB)にして、
A B C D E F G H I J K L M (列)
日付 方法 顧客名 担当者 商品 コード 動き 車種 料金 区間 料金 その他 料金
2/5 TEL カネボウ 木村 蓋 BB 興味あり
2/6 TEL カネボウ 木村 蓋 BB サンプル出し
2/9 TEL カネボウ 木村 蓋 BB 保留

sheet3には、名前を列C-列F(日進‐CC)にして、
A B C D E F G H I J K L M (列)
日付 方法 顧客名 担当者 商品 コード 動き 車種 料金 区間 料金 その他 料金
2/5 mail 日清 田中 ラベル CC 送付
2/7 TEL 日清 田中 ラベル CC 手配あり
2/8 mail 日清 田中 ラベル CC 納期

つまり、”顧客名‐コード”のシートを、ある組み合わせ分つくりたいのです。
もちろん、入力するのは、今の1枚のシート上で、分けたシートは自動的に内容が反映され
て、分けたシートは見るだけ。これって、できますか?
・ツリー全体表示

【78008】Re:ピボットテーブルからの安全なデータ...
発言  γ  - 16/3/4(金) 22:52 -

引用なし
パスワード
   ▼りった さん:
> (3) なにかもっといい方法有りますか?
と言われても、

>全販社のファイルを作ります。
そのファイルがどんなフォーマットなのかを示さないとわかりません。
途中プロセスに関する質問をされる前に、
全体としてなにをしたいのかを示していただきたい。
・ツリー全体表示

221 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free