Excel VBA質問箱 IV

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

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


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

【81049】Re:サーバー内にあるフォルダとファイル...
発言  マナ  - 19/7/26(金) 21:09 -

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

今日、会社で使ってみました。
当然ですが、問題なく使えました。
ネットワークフォルダです。

急に頼まれて、必要になったのですが
自分で作る意欲はありませんでした。
このスレのおかげで検索する手間もはぶけました。
1時間もかからず目的達成。

ありがとうございました。(誰に?)
・ツリー全体表示

【81048】Re:イベントの表示箇所について
お礼  り。  - 19/7/25(木) 22:12 -

引用なし
パスワード
   できました!
こんなに短い行でわかりやすく作って頂きありがとうございます。
何から何まですみません。マナさんのお陰で完成しました。
本当にありがとうございます。
・ツリー全体表示

【81047】Re:イベントの表示箇所について
発言  マナ  - 19/7/25(木) 21:41 -

引用なし
パスワード
   ▼り。 さん:

こんな感じで、表示後に、上端と左端を設定できませんか。

ActiveSheet.Calendar1.Visible = True
ActiveSheet.Calendar1.Top = target.Top
ActiveSheet.Calendar1.Left = target.Offset(, 1).Left
・ツリー全体表示

【81046】Re:イベントの表示箇所について
発言  り。  - 19/7/25(木) 21:15 -

引用なし
パスワード
   ▼マナ さん:
>▼り。 さん:
>
>>1,クリックしたセルに合わせて、イベントが表示される位置をずらす(クリックしたセルの右側等)事は可能でしょうか?
>
>TopやLeftで位置を指定できませんか。
>
アクティブセルを抽出した後に、組む流れなのでしょうか?
ht tp://www2.aqua-r.tepm.jp/~kmado/ke13u009.html
こちらを検索してみて貼り付けてみたのですが、だめでした。。。


>>2,イベントが出た対象のセルから、他のセルにカーソルを移動した際、表示されているイベントを非表示にしたいです
>
>最初に
>ActiveSheet.Calendar1.Visible = False
>を追加したらどうなりますか。

できました!本当にありがとうございます
・ツリー全体表示

【81045】Re:イベントの表示箇所について
発言  マナ  - 19/7/25(木) 18:50 -

引用なし
パスワード
   ▼り。 さん:

>1,クリックしたセルに合わせて、イベントが表示される位置をずらす(クリックしたセルの右側等)事は可能でしょうか?

TopやLeftで位置を指定できませんか。

>2,イベントが出た対象のセルから、他のセルにカーソルを移動した際、表示されているイベントを非表示にしたいです

最初に
ActiveSheet.Calendar1.Visible = False
を追加したらどうなりますか。
・ツリー全体表示

【81044】イベントの表示箇所について
質問  り。  - 19/7/25(木) 11:41 -

引用なし
パスワード
   先日に引き続き、この場をお借りさせて頂きます。
特定のセルをクリックするとカレンダーが表示され、日付をクリックするとセルに日付が入力されるものを作成しております。


   ActiveCell.Value = Calendar1.Value
   ActiveSheet.Calendar1.Visible = False
 End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("K:K,M:M,N:N,P:P,W:W,Y:Y")) Is Nothing Then Exit Sub
If Target.Row < 8 Then Exit Sub
     ActiveSheet.Calendar1.Visible = True
     ActiveSheet.Calendar1.Value = Date
 End Sub


上記のコードに、あと2つの機能を追加したいのですが、いろいろ調べているのですがこれ以上が全く進みません。どうかご教授お願い致します。

1,クリックしたセルに合わせて、イベントが表示される位置をずらす(クリックしたセルの右側等)事は可能でしょうか?(列や行が複数あるのですが、表示されるカレンダーの位置が毎回同じになってしまう為)

2,イベントが出た対象のセルから、他のセルにカーソルを移動した際、表示されているイベントを非表示にしたいです(現状だと日付を押すまで表示され続けてしまう)

素人で申し訳ありません。。。
・ツリー全体表示

【81043】Re:データベースから表を作成したのですが
発言  マナ  - 19/7/24(水) 17:49 -

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

>何か他に良い方法はあるでしょうか?

Dictionaryを利用するのが、簡単です。
Q&A自掲示板では、よく使われています。
でも、初めてだと全くわからないかもしれません。

Sub test()
  Dim tbl, 抽出条件 As Range, 抽出先 As Range
  Dim w()
  Dim dicX As Object, dicY As Object
  Dim 日付, 項目 As String, 数量 As String
  Dim k As Long
 
  tbl = Worksheets("詳細").Range("a2").CurrentRegion.Value
  Set 抽出条件 = Worksheets("見出し").Range("a2").CurrentRegion
  Set 抽出先 = Worksheets("一覧").Range("a2")
  
  ReDim w(1 To UBound(tbl), 1 To UBound(tbl))
  
  Set dicX = CreateObject("scripting.dictionary")
  Set dicY = CreateObject("scripting.dictionary")

  For k = 1 To UBound(tbl)
    日付 = tbl(k, 1)
    項目 = tbl(k, 3)
    数量 = tbl(k, 4)
    
    If WorksheetFunction.CountIf(抽出条件, 日付) Then
      If Not dicX.exists(日付) Then
        dicX(日付) = dicX.Count + 1
        w(1, dicX(日付)) = 日付
      End If
      If Not dicY.exists(項目) Then
        dicY(項目) = dicY.Count + 1
        w(dicY(項目), 1) = 項目
      End If
      
      w(dicY(項目), dicX(日付)) = 数量
      
    End If
  Next
  w(1, 1) = "項目/日付"
  
  抽出先.CurrentRegion.ClearContents
  抽出先.Resize(dicY.Count, dicX.Count).Value = w
  
End Sub
・ツリー全体表示

【81042】Re:データベースから表を作成したのですが
質問  Aces  - 19/7/24(水) 8:54 -

引用なし
パスワード
   ピボットをやってみたのですが、表にしたいデータが

数字だけでなく、文字(例えば10↓...10以下)もあり、

データの個数としてだけ一覧表になってしまいました

何か他に良い方法はあるでしょうか?

よろしくおねがいします
・ツリー全体表示

【81041】Re:データベースから表を作成したのですが
お礼  Aces  - 19/7/24(水) 6:45 -

引用なし
パスワード
   なるほど、ピボットテーブルですか

そう言えば、そんな機能あったなー、忘れてました笑

やはり1人だと、頭が凝り固まってしまうのですね

マナさん、本当にありがとうございました

ピボット、マクロ合わせて試してみます
・ツリー全体表示

【81040】Re:データが入っている最後の行
お礼  Aces  - 19/7/24(水) 6:41 -

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

色々試しながらやってみたいと思います

わからなかった時は、またご教授下さい
・ツリー全体表示

【81039】Re:データベースから表を作成したのですが
発言  マナ  - 19/7/23(火) 22:03 -

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

こんな手順でもよいかも。

1)一覧シートのA列に、フィルタオプションで項目名を転記
  抽出条件は、見出しシートのNo,とする。
2)見出しシートのNo,をコピーして、一覧シートに行列を入れ替えて貼り付け
3)一覧シートにSUMIFS関数で数量を計算

まずは手作業で試してみるとよいです。
・ツリー全体表示

【81038】Re:データベースから表を作成したのですが
発言  マナ  - 19/7/23(火) 18:40 -

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

レイアウトは少し異なりますが
ピボットテーブルを使えば同じような結果が得られます。
手操作だけでできる、とても便利な機能です。
・ツリー全体表示

【81037】データベースから表を作成したのですが
質問  Aces  - 19/7/23(火) 16:33 -

引用なし
パスワード
   見出シート、詳細シート、一覧シートがあります

見出シートのa列にあるデータで詳細シートのa列をフィルタをかけて抽出し

一覧シートにデータを貼り付ける

という作業です

(見出シート)
    A   ,   B   ,   C
1,
2,   No. ,
3,190721,
4,190722,

(詳細シート)抽出前
    A   ,   B   ,   C   ,  D
1,
2,No.  , 項目No.,項目名,数量
3,190721,  1   , りんご ,  5
4,190721,  2   , バナナ ,  6
5,190721,  3   , パイン ,  3
6,190722,  1   , りんご ,  2
7,190725,  1   , りんご ,  9
8,170101,  1   , りんご ,  8
9,170101,  2   , バナナ ,  4

(詳細シート)抽出後
    A   ,   B   ,   C   ,  D
1,
2, No.  , 項目No.,項目名,数量
3,190721,  1   , りんご ,  5
4,190721,  2   , バナナ ,  6
5,190721,  3   , パイン ,  3
6,190722,  1   , りんご ,  2


(一覧シート)
    A   ,   B   ,   C  
1,
2,項目/日,190721,190722
3,りんご ,  5   ,   2
4,バナナ ,  6   ,   -
5,パイン ,  3   ,   -

実際は数千行あるため、手作業だととても時間がかかってしまいます

こういうことがvbsで出来るのであれば教えて頂いたいです

ご面倒ではありますが、よろしくおねがいします
・ツリー全体表示

【81036】Re:データが入っている最後の行
発言  リスキーダック  - 19/7/23(火) 16:24 -

引用なし
パスワード
   >Lastlow や cells ( ) end などを使用すれば良いのでしょうか?

Lastlowが、言いたい事は解りのだけれど、何なのか解りません。
データ状態や人によって違いますが、一般的には
(どんな一般的なのか知らないけれど)

Range("E" & rows.count).end(xlup).row
Cells(rows.count,5).end(xlup).row

とか、使ってE、F列のどちらを使うか判定したり・・・。

けど、データの編集操作が荒い人には、使わないでセルを選択する方法にしたり。
データの下にどんなゴミが入っているのか解らないので・・・。
(下の方にゴミが入っているために500行しかないのに遅いと言われるのも腹が立つので)

注)Cells.lows.count 古いエクセルと混成ようならシートを指定した方がいいかも。

では。
・ツリー全体表示

【81035】データが入っている最後の行
質問  TK  - 19/7/23(火) 15:44 -

引用なし
パスワード
   E2とF2のデータを&で合成してA2に上書きし、

それをデータがある行まで行いたいのですが、どうすれば良いのでしょうか?

データが時には1000行、時には2000行と毎回違うので

Lastlow や cells ( ) end などを使用すれば良いのでしょうか?

ご教授、願います
・ツリー全体表示

【81034】Re:戻り値の後の:について
発言  γ  - 19/7/21(日) 22:12 -

引用なし
パスワード
   コロンの意味合いはマナさんのおっしゃるとおりでしょう。

プロシージャ全体を見ないと確定的なことは言えませんが、
Boolean型変数のデフォルト値は Falseなので、
このプロシージャの返り値としてデフォルト値をTrueにしておきたかった、
という意図だと想像されます。
(True,Falseの意味合いに依存しますが、普通はFalseがデフォルト値に
するのが一般的でしょうか。)

以下、余談。--------
私は、こうしたマルチステートメントは極力使わないようにしています。
それはリズムが崩れるからです(もし私にリズム感があればの話ですが)。
変数の宣言も一行に複数の変数を宣言することすらありません。

でも、最近の .Net系のVBなどでは、
変数宣言と初期値設定を一行に書いたりすることも
慣行としてあるようですから、一概には言えません。
ただし、ExcelVBAなどでは余り多数派にはなっていないと思いますが。
・ツリー全体表示

【81033】Re:セルの範囲指定について
お礼  り。  - 19/7/21(日) 20:10 -

引用なし
パスワード
   無事に反映されました。
非常に助かりました、有難う御座います。
・ツリー全体表示

【81032】Re:戻り値の後の:について
発言  マナ  - 19/7/21(日) 20:01 -

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

>戻り値の初期化なのでしょうか?

そうではなく、複数行を1行で記述するために
:(コロン)を使っているということです。
・ツリー全体表示

【81031】Re:セルの範囲指定について
発言  マナ  - 19/7/21(日) 19:49 -

引用なし
パスワード
   ▼り。 さん:

If Target.Count > 1 Then Exit Sub
If Target.Column <> Columns("T").Column Then Exit Sub
If Target.Row < 8 Then Exit Sub
・ツリー全体表示

【81030】Re:戻り値の後の:について
質問  nanashi  - 19/7/21(日) 19:46 -

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

変数の場合は、宣言と初期化を1行で行っているとわかるのですが、
Function宣言時の戻り値のあとに「: Function名=値」という書き方は初めて見ました。
戻り値の初期化なのでしょうか?

ご存じであれば、ご教授お願いいたします。
・ツリー全体表示

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