Excel VBA質問箱 IV

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

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


395 / 13645 ツリー ←次へ | 前へ→

【80586】型が一致しないがわかりません ゆうすけ 19/3/15(金) 17:11 質問[未読]
【80590】Re:型が一致しないがわかりません マナ 19/3/15(金) 18:37 発言[未読]
【80616】Re:型が一致しないがわかりません ゆうすけ 19/3/18(月) 13:59 質問[未読]
【80617】Re:型が一致しないがわかりません マナ 19/3/18(月) 18:40 発言[未読]
【80620】Re:型が一致しないがわかりません ゆうすけ 19/3/19(火) 11:16 回答[未読]
【80621】Re:型が一致しないがわかりません マナ 19/3/19(火) 18:49 発言[未読]
【80623】Re:型が一致しないがわかりません ゆうすけ 19/3/20(水) 11:56 回答[未読]
【80624】Re:型が一致しないがわかりません マナ 19/3/20(水) 17:43 発言[未読]
【80626】Re:型が一致しないがわかりません ゆうすけ 19/3/21(木) 12:48 回答[未読]
【80627】Re:型が一致しないがわかりません マナ 19/3/21(木) 13:07 発言[未読]
【80628】Re:型が一致しないがわかりません ゆうすけ 19/3/21(木) 13:17 回答[未読]
【80629】Re:型が一致しないがわかりません マナ 19/3/21(木) 13:39 発言[未読]
【80630】Re:型が一致しないがわかりません ゆうすけ 19/3/22(金) 10:42 回答[未読]
【80631】Re:型が一致しないがわかりません ゆうすけ 19/3/22(金) 12:09 発言[未読]
【80632】Re:型が一致しないがわかりません ピンク 19/3/22(金) 15:09 回答[未読]
【80635】Re:型が一致しないがわかりません マナ 19/3/22(金) 17:52 発言[未読]
【80636】Re:型が一致しないがわかりません ゆうすけ 19/3/25(月) 14:29 お礼[未読]

【80586】型が一致しないがわかりません
質問  ゆうすけ  - 19/3/15(金) 17:11 -

引用なし
パスワード
   1週間前にVBAの勉強を始めました。少しずつエラーを直していったのですが、最後の部分でつまづいています。
下から8行目の
Sh2Range.Offset(newRecordOffset, 0).Value = newRecordValues
で、「型が一致しない」となってしまいます。
どなたかお助けください。

Sub saveData()
  Dim i As Long
  For i = 14 To 41
    If Worksheets("1").Cells(i, 16) = "1" Then
      Dim Sh1 As Worksheet
      Dim Sh2 As Worksheet
      Dim Sh1Range As Range
      Dim Sh2Range As Range
      Dim newRecordOffset As Variant
      Dim newRecordValues As Variant
      Dim dataRow As Long
      Set Sh1 = Worksheets("1")
      Set Sh1Range = Sh1.Range("K14:K41")
      Set Sh2 = Worksheets("2")
      Set Sh2Range = Sh2.Range("E24")
      Set newRecordOffset = Sh2.Range("E24")
      dataRow = 1
        Do While Sh1Range.Cells(dataRow, 0).Value <> ""
          newRecordValues = Array( _
            Sh1Range.Cells(dataRow, 1).Value _
            )
          Sh2Range.Offset(newRecordOffset, 0).Value _
            = newRecordValues
          dataRow = dataRow + 1
          newRecordOffset = newRecordOffset + 1
        Loop
    End If
  Next i
End Sub

【80590】Re:型が一致しないがわかりません
発言  マナ  - 19/3/15(金) 18:37 -

引用なし
パスワード
   ▼ゆうすけ さん:


>Sh2Range.Offset(newRecordOffset, 0).Value = newRecordValues
>で、「型が一致しない」となってしまいます。


たぶん、それより前の段階で間違っていると思います。

>Dim newRecordOffset As Variant
>Set newRecordOffset = Sh2.Range("E24")


Option Explicit

Sub saveData()
  Dim i As Long
  Dim Sh1 As Worksheet
  Dim Sh2 As Worksheet
  Dim Sh1Range As Range
  Dim Sh2Range As Range
  Dim newRecordOffset As Long
  Dim dataRow As Long
  
  Set Sh1 = Worksheets("1")
  Set Sh1Range = Sh1.Range("K14:K41")
  Set Sh2 = Worksheets("2")
  Set Sh2Range = Sh2.Range("E24")

  For i = 14 To 41
    If Worksheets("1").Cells(i, 16).Value = 1 Then
      dataRow = 1
      newRecordOffset = Sh2Range.Value
      
      Do While Sh1Range.Cells(dataRow, 0).Value <> ""
        Sh2Range.Offset(newRecordOffset, 0).Value = _
            Sh1Range.Cells(dataRow, 1).Value
        dataRow = dataRow + 1
        newRecordOffset = newRecordOffset + 1
      Loop
      
    End If
  Next i
  
End Sub

【80616】Re:型が一致しないがわかりません
質問  ゆうすけ  - 19/3/18(月) 13:59 -

引用なし
パスワード
   ▼マナ さん:
ご丁寧にご返信ありがとうございます!
教えて頂いたものを入力したのですが
下記の部分が「型が一致しません」と出てしまいました。

newRecordOffset = Sh2Range.Value

どこを修正すれば良いのでしょうか??

【80617】Re:型が一致しないがわかりません
発言  マナ  - 19/3/18(月) 18:40 -

引用なし
パスワード
   ▼ゆうすけ さん:

>下記の部分が「型が一致しません」と出てしまいました。
>
>newRecordOffset = Sh2Range.Value


Worksheets("2")のE24には、何が入力されているのでしょうか?

【80620】Re:型が一致しないがわかりません
回答  ゆうすけ  - 19/3/19(火) 11:16 -

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

E24はブランクでセルの設定は「標準」になっています。

【80621】Re:型が一致しないがわかりません
発言  マナ  - 19/3/19(火) 18:49 -

引用なし
パスワード
   ▼ゆうすけ さん:

>E24はブランクでセルの設定は「標準」になっています。

newRecordOffset = Val(Sh2Range.Value)

これで、エラーはなくなると思います。
ただ、今のコードでは期待通りの結果は得られないと思います。

どういう条件で、どこから、どこに転記したいのか説明できませんか。
提示されたコードをみても、何をしたいのか全く理解できません。

【80623】Re:型が一致しないがわかりません
回答  ゆうすけ  - 19/3/20(水) 11:56 -

引用なし
パスワード
   ▼マナ さん:
いつも親切にご説明ありがとうございます。

やりたいことは
・商品分類が1と2の2種類に分かれている商品リストがあります。
・分類1の商品はE24のセルから、分類2の商品はE56のセルからリストアップされるように転記したいです。

イメージとしてはA4用紙の上段が分類1の商品、下段が分類2の商品という感じです。

ネットや本で独学でマクロを勉強し始めたばかりなので
とりあえず「1であればE24に転記する」という条件1だけのマクロを作ってこちらに投稿させて頂いたという背景です。

【80624】Re:型が一致しないがわかりません
発言  マナ  - 19/3/20(水) 17:43 -

引用なし
パスワード
   ▼ゆうすけ さん:

>やりたいことは
>・商品分類が1と2の2種類に分かれている商品リストがあります。
>・分類1の商品はE24のセルから、分類2の商品はE56のセルからリストアップされるように転記したいです。

商品リストのレイアウト(どこに、どんなデータがあるのか)を
セル番地がわかるように、説明してください。

【80626】Re:型が一致しないがわかりません
回答  ゆうすけ  - 19/3/21(木) 12:48 -

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

Worksheet"1"のK13:K40に商品名が入っています。
同じWorksheet"1"のP13:P40に商品分類の数字(1か2)が入っています。

別のシート"Sheet1"がマスタリストのような役目をしています。
C13:C40に日本語の商品名が入力されており、そこで商品名を選ぶと
K13:40にVLOOKUPで"Sheet1"から引っ張ってきた英語の商品名が入力されるようになっています。
商品分類も同様で、C13:C14で商品を選ぶとVLOOKUPで"Sheet1"のリストから引っ張ってくるように設定されています。

【80627】Re:型が一致しないがわかりません
発言  マナ  - 19/3/21(木) 13:07 -

引用なし
パスワード
   ▼ゆうすけ さん:

1)C13:C14で商品を選ぶ
2)K13:K40に英語の商品名を表示(Vlookup)
3)P13:P40に商品分類の数字(1か2)を表示(Vlookup)

ということですか

で、マクロでE24に転記したいのは、
C列の商品名ですか、K列の英語の商品名ですか。

【80628】Re:型が一致しないがわかりません
回答  ゆうすけ  - 19/3/21(木) 13:17 -

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

はい!下記のとおりです。
>
>1)C13:C14で商品を選ぶ
>2)K13:K40に英語の商品名を表示(Vlookup)
>3)P13:P40に商品分類の数字(1か2)を表示(Vlookup)
>

マクロに転記したいのはK列の英語の商品名です。

【80629】Re:型が一致しないがわかりません
発言  マナ  - 19/3/21(木) 13:39 -

引用なし
パスワード
   ▼ゆうすけ さん:

では、こんな感じでできそうです。

Option Explicit

Sub test()
  Dim r1 As Range
  Dim c As Range
  Dim n1 As Long
  
  Set r1 = Worksheets("2").Range("E24")

  For Each c In Worksheets("1").Range("K14:K41")
    If c.Value = "" Then Exit For
    
    If c.Offset(, 4).Value = 1 Then
      r1.Offset(n1).Value = c.Value
      n1 = n1 + 1
     Else
      '商品分類2の場合
     End If
  Next
 
End Sub

【80630】Re:型が一致しないがわかりません
回答  ゆうすけ  - 19/3/22(金) 10:42 -

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

ご回答ありがとうございます!
マナさんのおかげで、無事転記に成功することが出来ました!

しかし、転記は出来たのですが今度はセルを上から詰めて表示することに苦戦しています。

・ワークシート"1"のリストは
K13、K14、K16が商品分類1
K15が商品分類2となっています。

こちらで作った転記のマクロを実行すると
ワークシート"2"の
E24、E25、E27に商品分類1が転記され、E26がブランクという状態になっています。
E24:E49の間にブランクを詰めて分類1の商品名を表記させたいです。

上から順番に表示させるために下記のマクロを作成しました。
ブランクを詰めることは出来ましたが、E2セルから並んでしまい
どこを変更したらよいのか修正点が分からず悩んでおります。
ご依頼ばかりで申し訳ございませんが、マナさんのお力をお借り出来たらとても嬉しいです。
 
Sub Tumeru()
Dim i As Integer, j As Integer
j = 1
For i = 24 To 46
If (Range("E" & i).Rows <> "") Then
j = j + 1
Range("E" & i).Copy Range("E" & j)
Range("E" & i) = ""
End If
Next i
End Sub

【80631】Re:型が一致しないがわかりません
発言  ゆうすけ  - 19/3/22(金) 12:09 -

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

下記補足です。
ブランクのセルを詰めて順番に表記する際に
ブランクのセルを削除して詰めることはやりたくありません・・・。
というのも、E24:E49に商品分類1、E56:E59に商品分類2を入力したいため
商品分類1のブランクのセルを削除してしまうと、商品分類2のセルが移動してしまうためです。


>▼マナ さん:
>
>ご回答ありがとうございます!
>マナさんのおかげで、無事転記に成功することが出来ました!
>
>しかし、転記は出来たのですが今度はセルを上から詰めて表示することに苦戦しています。
>
>・ワークシート"1"のリストは
>K13、K14、K16が商品分類1
>K15が商品分類2となっています。
>
>こちらで作った転記のマクロを実行すると
>ワークシート"2"の
>E24、E25、E27に商品分類1が転記され、E26がブランクという状態になっています。
>E24:E49の間にブランクを詰めて分類1の商品名を表記させたいです。
>
>上から順番に表示させるために下記のマクロを作成しました。
>ブランクを詰めることは出来ましたが、E2セルから並んでしまい
>どこを変更したらよいのか修正点が分からず悩んでおります。
>ご依頼ばかりで申し訳ございませんが、マナさんのお力をお借り出来たらとても嬉しいです。
> 
>Sub Tumeru()
>Dim i As Integer, j As Integer
>j = 1
>For i = 24 To 46
>If (Range("E" & i).Rows <> "") Then
>j = j + 1
>Range("E" & i).Copy Range("E" & j)
>Range("E" & i) = ""
>End If
>Next i
>End Sub

【80632】Re:型が一致しないがわかりません
回答  ピンク  - 19/3/22(金) 15:09 -

引用なし
パスワード
   ▼ゆうすけ さん:
>Sub Tumeru()
>Dim i As Integer, j As Integer
>j = 1
>For i = 24 To 46
>If (Range("E" & i).Rows <> "") Then
>j = j + 1
>Range("E" & i).Copy Range("E" & j)
>Range("E" & i) = ""
>End If
>Next i
>End Sub

Sub Tumeru2()
  Dim v As Variant, c As Range, i As Long
  
  With Range("E24:E46")
    ReDim v(1 To .Count)
    For Each c In .Cells
      If c.Value <> "" Then
        i = i + 1
        v(i) = c.Value
      End If
    Next
    .Value = Application.Transpose(v)
  End With
End Sub

【80635】Re:型が一致しないがわかりません
発言  マナ  - 19/3/22(金) 17:52 -

引用なし
パスワード
   ▼ゆうすけ さん:

>E24、E25、E27に商品分類1が転記され、E26がブランクという状態になっています。


間違えました。

If c.Offset(, 5).Value = 1 Then

にしてください。
そして、この行の意味をよく考えてください。
結果がでればよいというものではありません。
理解できていれば、ご自分で修正できます。

さらに、↓は、必要なくなります。

>上から順番に表示させるために下記のマクロを作成しました。

【80636】Re:型が一致しないがわかりません
お礼  ゆうすけ  - 19/3/25(月) 14:29 -

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

返答が遅くなってしまい申し訳ございません。
マナさんのおかげで無事完成致しました!!
本当にありがとうございました。

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