アプリ版:「スタンプのみでお礼する」機能のリリースについて

https://oshiete.goo.ne.jp/qa/9016851.html

このリンクの質問の解答にあるマクロを使用しようとしたのですが、全く同じリストを作って動かしてみてもエラーで希望した結果が得られません。
エラーコードは「400」というものが出ます。
このコードの修正でもいいですし、全く別のマクロでもなんでもいいので、解決策がわかる方ぜひ教えてください。
よろしくお願いします。

「エクセルで複数行に散らばった情報を一行に」の質問画像

質問者からの補足コメント

  • 行数としては1万行くらいあります。
    1回だけでなく、少なくとも月に一度行いたいと思っています。
    (会社のソフトから出力されるエクセルデータを変換したいため。そもそも出てくるデータの書式を変更するのは不可能です。)
    マクロではなく関数でやってみましたが、私が見つけたやり方だと一度再計算するのに50分程度かかるようになってしまい現実的ではなかったためマクロ一発でできるならそれがいいと思った次第です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/10/24 11:02
  • 環境はexcel2016です。
    他のマクロは問題なく作動しています。
    また、今回私が処理したいデータについてはA列がユニークキーとなり、このマクロの仕様で問題有りません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/10/24 12:09
  • excel2013の別のPCでも試してみましたが、同じエラーが出ました。

      補足日時:2022/10/24 12:17

A 回答 (4件)

>今回私が処理したいデータについてはA列がユニークキーとなり、このマクロの仕様で問題有りません。



この前提で作ってます。最大列をE列にしています。
Sheet2の2行目以降へ設定します。(1行目の見出しはあなたが作成しておいてください)
標準モジュールに登録してください。

Option Explicit
Public Sub まとめ()
Const MaxCol As Long = 5 '最大列 E列
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim wcol As Long
Dim key As String
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1 最終行を求める
sh2.Rows("2:" & Rows.Count).ClearContents '2行目以降クリア
maxrow2 = 2
For row1 = 2 To maxrow1
key = sh1.Cells(row1, 1).Value
If dicT.exists(key) = False Then
row2 = maxrow2
sh2.Cells(row2, 1).Resize(, 5).Value = sh1.Cells(row1, 1).Resize(, 5).Value
dicT(key) = maxrow2
maxrow2 = maxrow2 + 1
Else
row2 = dicT(key)
For wcol = 2 To MaxCol
If sh1.Cells(row1, wcol) <> "" Then
sh2.Cells(row2, wcol) = sh1.Cells(row1, wcol)
End If
Next
End If
Next
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!
エラーもなく希望の書式が作成できました!
こちらを参考に、実際のデータを編集していきます。
本当に助かりました!

お礼日時:2022/10/24 16:51

こんにちは



ご提示のマクロを試してみましたが、当方の環境ではエラーは出ませんね。
(エクセル2019です)

ロジック的に「これで良いのかな」という疑問はありますが・・
(異なるデータがあっても、最初のものだけが採用され他は捨てられる)

エラー発生の原因はいろいろあるようですので、以下あたりを試してみてください。
https://ja.101-help.com/c382426305-vba-error-400 …
https://plaza.rakuten.co.jp/mscrtf/diary/2013031 …
    • good
    • 0

こちらで、提示された画像通りのデータをSheet1に作成し、


マクロを実行すると添付図のような結果が得られました。
マクロ自体の問題ではなく、環境の問題と思われます。
(当方 excel2019です)
vba エラー 400 で検索すると
いくつかヒットしますが、原因の特定ができません。
https://search.yahoo.co.jp/search?p=vba+400+%E3% …

他のマクロは問題なく動作しているのでしょうか?

又、このマクロですが、名前(A列)をユニークキーとして使用しています。
そのため、2行目の田中の住所(E3)に北海道と記入すると
表示結果は、
田中 タナカ 90 123 北海道
となり、新潟の住所はなくなってしまいます。

上記の仕様で良いならば、エラー400を修正すれば良いかもしれませんが、
上記の仕様で都合がわるいなら、このマクロは使えません。

あなたの環境でA列はユニークキーとなるのでしょうか。
他にA列と組み合わせればユニークとなるものがあるのでしょうか。
まず、どのようにしてユニークをなるものを決めるかが必要かと考えます。
「エクセルで複数行に散らばった情報を一行に」の回答画像2
この回答への補足あり
    • good
    • 0
この回答へのお礼

環境はexcel2016です。
他のマクロは問題なく作動しています。
また、今回私が処理したいデータについてはA列がユニークキーとなり、このマクロの仕様で問題有りません。

お礼日時:2022/10/24 12:27

たぶんバージョン違いによるメソッドやオブジェクトの使い方の差異によるものでしょう。


2015年に回答されていますので、おそらく Excel2013 向けかと思われます。

バージョンに依存する命令ってそんなになかったはずですが、
自分はその点については詳しくないためピンポイントなアドバイスはできません。ごめんなさい。

並べ替えをして対処する方法が併せて回答されていますので、それを試すことを薦めます。
例え ”50万行分のデータ” があったとしてもです。
今のパソコンは2015年当時よりも処理能力が上がっています。
現実的ではないなんてことはありません。

・・・

(´・ω・`) 1回しか使わないような処理のためのマクロ作成に時間をかけるのはどうかと思うんだ。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!