Excel VBA質問箱 IV

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

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


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

【78508】Re:「・」か改行などで区切られたセルを...
発言  β  - 16/10/24(月) 9:18 -

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

1つのシートが行によって、A形式だったりB形式だったりするということではなく
A形式のものをを完成形の形に、B形式のものを完成形の形にと
ようは2つのコードを要望しておられるのですね?
・ツリー全体表示

【78507】「・」か改行などで区切られたセルを縦の...
質問  yk  - 16/10/24(月) 0:30 -

引用なし
パスワード
   お世話になります。
「・」や改行で区切られた2項目のデータを、縦の行ごとに区切ったEXCELにしたいのですが、

【入力例A】

| A    | B        | C    |
-----------------------------------------------------
1|品番   | カラー     | サイズ
-----------------------------------------------------
2|XYZ-001  | ブラウン・グレー| 
-----------------------------------------------------
3|XYS-002  | カーキ・白・黒 |S・M・L
-----------------------------------------------------
4|XYZ-123  |          |S・M・L
-----------------------------------------------------
5|XYZ-999  |         |
-----------------------------------------------------
6|XYZ-456  | ピンク・グリーン|
-----------------------------------------------------
※別の列に下図「入力例B」のように項目名1・項目名2の列もあり。


または
【入力例B】(セル内改行)※Aのデータをもとに、数式を使い試行錯誤途中のセルの状態。

| A    | B        | C    | D
-----------------------------------------------------
1| 項目名1| 値1      | 項目名2| 値2
-----------------------------------------------------
2| カラー | XYZ-001 ブラウン|     |
|     | XYZ-001 グレー |     |
-----------------------------------------------------        
3| カラー | XYZ-002 カーキ | サイズ | S
|     | XYZ-002 白   |     | M
|     | XYZ-002 黒   |     | L
-----------------------------------------------------
4| サイズ | XYZ-123 S   |      |
|     | XYZ-123 M   |      |
|     | XYZ-123 L   |      |
-----------------------------------------------------
※カラーがなくサイズがあるものは、値1に詰める。

↑のようなエクセルの入力状態を下図のようにしたいのですが、

【完成図例】
※全てを「行」に分けて、値2があれば品番と値1をコピーして行が増える
| A    | B    | C    | 
-----------------------------------------------------
1| 品番  | 値1  |  値2
-----------------------------------------------------
2| XYZ-001 | ブラウン |     |
-----------------------------------------------------
3| XYZ-001 | グレー |     |
-----------------------------------------------------
4| XYZ-002 | カーキ |  S
-----------------------------------------------------
5| XYZ-002 | カーキ |  M
-----------------------------------------------------
6| XYZ-002 | カーキ |  L
-----------------------------------------------------
7| XYZ-002 | 白   |  S
-----------------------------------------------------
8| XYZ-002 | 白   |  M
-----------------------------------------------------
9| XYZ-002 | 白   |  L
-----------------------------------------------------
10| XYZ-002 | 黒   |  S
-----------------------------------------------------
11| XYZ-002 | 黒   |  M
-----------------------------------------------------
12| XYZ-002 | 黒   |  L
-----------------------------------------------------
13| XYZ-123 |  S   |      |
-----------------------------------------------------
14| XYZ-123 |  M   |      |
-----------------------------------------------------
15| XYZ-123 |  L   |      |
-----------------------------------------------------
16 XYZ-456〜

【入力例B】の状態から、B列のみだったら、列選択で別のシートに貼り付けて
テキスト形式で保存してエクセルで開くと、元のセル内改行が行ごとに改行された状態(B列部分のみ)ができたのですが、
値2も「完成図例」に入れられず行き詰まりました。

※例は全てA列からアルファベット順に書いていますが実際のファイルは余計な列も含まれています。


このような変更をしたい場合に、何か良いアイデアがございましたら教えてください。
宜しくお願いします。
・ツリー全体表示

【78506】Re:dowhileで複数条件を指定
発言  β  - 16/10/23(日) 19:23 -

引用なし
パスワード
   ▼マナ さん:
>▼山川 さん:
>
>And と Or で使い方を間違えている?
>ということはないでしょうか。

あぁ、もしかしたら、そういうことかも ですね。
・ツリー全体表示

【78505】Re:dowhileで複数条件を指定
発言  マナ  - 16/10/23(日) 18:58 -

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

And と Or で使い方を間違えている?
ということはないでしょうか。
・ツリー全体表示

【78504】Re:dowhileで複数条件を指定
発言  β  - 16/10/23(日) 15:30 -

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

>Do Whileで複数条件はもともと無理なのですか?

そんなことはありません。

たとえば、以下のコードを走らせてみてください、

Sub Test()
  Dim x As Long
  Dim y As Long
  Dim cnt As Long
  
  x = 10
  y = 9
  
  Do While x = 10 And y <> 20
    cnt = cnt + 1
    MsgBox cnt & "回目"
    If cnt = 3 Then y = 20
  Loop
  
End Sub

ステップ実行はご存知ですよね。
ステップ実行で、どのようにループするか(ループされないか)、その時の
Ws.Cells(I, 5).Value や UsrFrmQus.txtFil.Text や Ws.Cells(I, 1).Value
の値を見ながら確認されてはいかがでしょう。
・ツリー全体表示

【78503】dowhileで複数条件を指定
質問  山川  - 16/10/23(日) 14:05 -

引用なし
パスワード
   Do While Ws.Cells(I, 5).Value = False And UsrFrmQus.txtFil.Text <> Ws.Cells(I, 1).Value

で条件2つつけているにも関わらず、初めの条件しか聞いていません。
Do Whileで複数条件はもともと無理なのですか?
・ツリー全体表示

【78502】Re:FunctionからFunctionを呼び出すには
お礼  M.E  - 16/10/16(日) 17:33 -

引用なし
パスワード
   ▼β さん:
>変数の名前(含むプロシジャ名)には、命名ルールがあります。
>数字で始まるものはNGです。

早速のご返答、ありがとうございます。


2〜3日前からVBAに興味を持ち、ネットで調べながら独学を始めましたが、
「命名ルール」があることを見付けることが出来ませんでした。

β様のコメントのおかげで、一歩前に進めます。
頂いたアドバイスを元に、自分で作っているマクロを調整してみます。
(β様に記述いただいたものをmoduleへコピーして動作も試してみました。)

何度も、何度も壁にぶつかると思います。
その際には、また、この質問箱を頼らせていただこうと思います。

今後とも、どうぞよろしくお願い申し上げます。

本当に、ありがとうございました。
・ツリー全体表示

【78501】Re:FunctionからFunctionを呼び出すには
発言  β  - 16/10/16(日) 17:01 -

引用なし
パスワード
   ▼M.E さん:

こんな感じですかね。

Function 結果(入力値 As Double) As Double
  結果 = 十倍(入力値)
End Function

Function 十倍(入力値 As Double) As Double
  十倍 = 入力値 * 10
End Function

なお、変数の名前(含むプロシジャ名)には、命名ルールがあります。
数字で始まるものはNGです。
・ツリー全体表示

【78500】FunctionからFunctionを呼び出すには
質問  M.E  - 16/10/16(日) 16:02 -

引用なし
パスワード
   初めて質問させていただきます。

例えば以下のようなことを行いたいとします。
(Functionを呼び出さなくても出来ることは、理解していますが、例として)

 Function結果(入力値 as single)

  Function 10倍を呼び出して、入力値を10倍にする

  結果= 入力値を10倍にした値

 End Function

 ---------------------------------------------------

 Function 10倍(入力値 as single)

  10倍 = 10*入力値

 End Function

・Fanction結果の入力値から数字を入力(数字が入力されているCellを指定)
・Function10倍に入力値を渡し、数字を10倍
・Fanction結果の戻り値としてエクセルのCellへ結果を戻す

Function結果をユーザー定義から自作関数として使用したいと考えております。
Function 10倍も単独で自作関数として使用したいと考えております。

Callなど使って、自分で組んでみたのですが、記述の仕方が間違っているらしく
上手く機能してくれません。


ご助言いただければ幸いに存じます。
よろしくお願い申し上げます。
・ツリー全体表示

【78499】Re:ウィンドウ枠固定して、アクティブセ...
お礼  ムニ  - 16/10/11(火) 23:14 -

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

レスありがとうございます!
早速やってみます。
以下は自分で模索した結果です。
C4で枠固定したとして…
ボタンを押したら
range("C4").select
activewindow.smallscroll toRight:=21
いったんC4を選択、そこから右へ21セル目が左端にさせたい箇所

…何セル目か数えないといけないし、いったんC4セルを起点にして…のプログラムになるけれど、やりたいことはできそうかなと思いました。

>▼ムニ さん:
>
>具体的に、どの列とどの行で枠固定させているかが見えませんが
>たとえば、以下のコードは 画面がどんな状態であれ K列が可動領域の左端になります。
>
>Sub Test()
>  Application.Goto Range("K1"), True
>End Sub
・ツリー全体表示

【78498】Re:ウィンドウ枠固定して、アクティブセ...
発言  β  - 16/10/11(火) 22:05 -

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

具体的に、どの列とどの行で枠固定させているかが見えませんが
たとえば、以下のコードは 画面がどんな状態であれ K列が可動領域の左端になります。

Sub Test()
  Application.Goto Range("K1"), True
End Sub
・ツリー全体表示

【78497】ウィンドウ枠固定して、アクティブセルの...
質問  ムニ  - 16/10/11(火) 21:26 -

引用なし
パスワード
   1枚のシートに、横に長いデータ表があります。
列には各メーカーの製品一覧
横は12ヶ月の月ごと売り上げ金額、その横は前年比、その横に12ヶ月ごとの売り上げ個数、その横に前年比…のような。
とても長くなるので、ボタンを作って、押せば見たいデータ箇所を表示させるようにジャンプ(セル移動)プログラムをあてたいです。
ウィンドウ枠を固定させているので、固定された起点のセルのすぐ横にアクティブセルを移動させればいいのかと思うのですが、どのようにプログラムを書けばいいのがご教示いだだきたく、よろしくお願いします。
・ツリー全体表示

【78496】Re:ピボット作成
お礼  パニック  - 16/10/11(火) 11:23 -

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

有難うございました。
MyRow = Sheets("1.尺度ごとの集計").Range("A10000").End(xlUp).row

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                   SourceData:="1.尺度ごとの集計!R3C1:R" & MyRow & "C7" _
                   , version:=xlPivotTableVersion15).CreatePivotTable _
                   TableDestination:="Sheet2!R3C1", TableName:="部署", DefaultVersion _
                   :=xlPivotTableVersion15

とすることで解決しました。
有難うございます。
・ツリー全体表示

【78495】Re:ピボット作成
発言  マナ  - 16/10/9(日) 23:24 -

引用なし
パスワード
   ▼パニック さん:

ピボットと関係なく、初歩的なことが理解できていないのではと気になっています。

>Setでエラーになります。

の意味は、

>  'Range("A3:E3").Select
>  'Range(Selection, Selection.End(xlDown)).Select

だとエラーにならないのに

>  Set src = Sheets("1.尺度ごとの集計").Range("A3").CurrentRegion
 
setを使うとエラーになるということですか。

だとすると、CurrentRegionの意味を理解していますか。
2行目にデータがあると使えませんが、問題ないですか。
馬鹿にしないでというような、とても失礼なコメントになってしまってごめんなさい。

先のコメント通り、毎回ピボットを作成する必要性がわからないし、
今は、もっと基礎的で汎用性のあるものから取り組まれてはどうかと考えますが、
エラー原因をしっておくことは、大切だとも思います。
・ツリー全体表示

【78494】Re:画像をJPEGに変換
お礼  ちろ  - 16/10/9(日) 12:08 -

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

わざわざプログラムを書いていただきありがとうございます。
思い通りに動きましたヾ(感'∀'激)ノ゙

mosを使う事で画像サイス調整のプログラムもスマートになっており大変勉強になりました。


▼β さん:
>▼ちろ さん:
>
>とりあえず一例です。
>不具合あれば指摘願います。
>
>Sub Test()
>  Dim myRange As Range  '画像を配置するセル範囲
>  Dim myPic As Variant
>
>  Set myRange = ActiveCell.MergeArea  'このセル範囲に収まるように画像を縮小する
>  
>  myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
>  If VarType(myPic) = vbBoolean Then Exit Sub
>
>  With ActiveSheet.Pictures.Insert(myPic)
>    .ShapeRange.LockAspectRatio = msoTrue
>    .Cut
>    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
>    DoEvents
>    With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
>      .Width = myRange.Width
>      If .Height > myRange.Height Then .Height = myRange.Height
>      .Top = myRange.Top + (myRange.Height - .Height) / 2
>      .Left = myRange.Left + (myRange.Width - .Width) / 2
>    End With
>  End With
>  
>End Sub
・ツリー全体表示

【78493】Re:画像をJPEGに変換
発言  β  - 16/10/8(土) 21:57 -

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

とりあえず一例です。
不具合あれば指摘願います。

Sub Test()
  Dim myRange As Range  '画像を配置するセル範囲
  Dim myPic As Variant

  Set myRange = ActiveCell.MergeArea  'このセル範囲に収まるように画像を縮小する
  
  myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
  If VarType(myPic) = vbBoolean Then Exit Sub

  With ActiveSheet.Pictures.Insert(myPic)
    .ShapeRange.LockAspectRatio = msoTrue
    .Cut
    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
    DoEvents
    With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
      .Width = myRange.Width
      If .Height > myRange.Height Then .Height = myRange.Height
      .Top = myRange.Top + (myRange.Height - .Height) / 2
      .Left = myRange.Left + (myRange.Width - .Width) / 2
    End With
  End With
  
End Sub
・ツリー全体表示

【78492】Re:画像をJPEGに変換
発言  β  - 16/10/8(土) 21:31 -

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

>残念ながら未だに完成しておりません。
>何処が悪いのでしょうか。
>

どういう状況なのかを明確にしていただければ、皆さん、アドバイスしやすいと思います。

Set sp = Range(sp.TopLeftCell, sp.BottomRightCell)

ここで、実行時エラーになったのでしょうか?
であれば、左辺に右辺のオブジェクトを代入しているわけですが、その左辺の中の sp ですけど、

・まず、sp には事前に何も入れていませんよね。Nothiong ですね。
 Nothing.TopLEftCell 等、具合悪いですよね。
・次に Dim sp As Shape と規定してますよね。
 でも、このコードでセットしようとしているのは Range オブジェクトですよね。
 これまた、具合悪いですよね。

まず、そのあたりを正常にしてから、実行し、なおかつ不具合が出たら、SOSだされたらいいと
思います。
・ツリー全体表示

【78491】Re:ピボット作成
発言  マナ  - 16/10/8(土) 13:52 -

引用なし
パスワード
   ▼パニック さん:
>AのBookからあるデータシートを新しいBookにコピーして
>ピボットを作成したいです。

>色々と検索し下記に変更してもエラーになってしまいます。

>VBAではなく、普通にやるとピボットは組めます。


考え方をかえて、こんな感じではだめなのでしょうか。
これならマクロ使うまでもないかもしれません。

1)ひな形Book(データテーブルとピボット)を手動で作成しておき
2)AのBookのデータをひな形に転記
3)ピボットを更新
4)ひな形を別名で保存
・ツリー全体表示

【78490】Re:画像をJPEGに変換
質問  ちろ  - 16/10/8(土) 11:46 -

引用なし
パスワード
   βさん
アドバイスいただきありがとうございました。

ご紹介いただいたページや他のページを参考に試行錯誤してますが
残念ながら未だに完成しておりません。
何処が悪いのでしょうか。

ご教授いただけないでしょうか。


Public Sub CCC()

Dim myRange As Range '画像を配置するセル範囲
Dim rX, rY As Double
Dim myDhape, myPic As Variant
Dim Cancel As Boolean
Dim SpObj As Object
  Dim sp As Shape

 
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
If VarType(myPic) = vbBoolean Then Exit Sub

Set myRange = ActiveCell.MergeArea 'このセル範囲に収まるように画像を縮小する
   
Application.ScreenUpdating = False

With ActiveSheet.Pictures.Insert(myPic).ShapeRange
  rX = myRange.Width / .Width
  rY = myRange.Height / .Height
 If rX > rY Then
  .Height = .Height * rY
  Else
  .Width = .Width * rX
 End If
 
 
 '----------------------追加--------------------------------------------
'For Each sp In ActiveSheet.Shapes
  Set sp = Range(sp.TopLeftCell, sp.BottomRightCell)
      sp.Select
      Selection.Cut
      ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
      DoEvents
      With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
        .Left = ActiveCell.Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置
        .Top = ActiveCell.Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置
      End With
' Next

'--------------------------------------------------------------------
   
End With

Application.ScreenUpdating = True
Cancel = True


End Sub
・ツリー全体表示

【78489】Re:ピボット作成
発言  γ  - 16/10/7(金) 20:36 -

引用なし
パスワード
   ▼パニック さん:
>下記のようなエラーが出ます。

>【エラーメッセージ】
>そのピボットテーブルのフィールド名が正しくありません。
>ピボットテーブルを作成するにはラベルのついた列でリストとして編成されたデータを使用する必要があります。

繰り返し確認しますが、
「どの行で」エラーになるのですか?
その行で使っているフィールド名が正しくないのです。

お尋ねしたことに、きちんと回答してください。
・ツリー全体表示

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