[[20161229153522]] 『条件通りのマクロに変更したい』(ウルトラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件通りのマクロに変更したい』(ウルトラ)

Sub Macro1()
Worksheets("毛筆でかく 原本").Range("A2:C100,E2:E100").Copy
Worksheets("毛筆データー 筆で書く").Range("B1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub

上記のように、マクロを設定しましたが、下記のような条件に変更する時にマクロをどのように変更したらよいでしょうか。

("毛筆でかく 原本")のシートを("毛筆データー 筆で書く")のシートへコピーする。
但し、("毛筆でかく 原本")のシートの横書きのデーターをセルの書式設定で方向を縦書きに設定してあるシートに値だけを("毛筆データー 筆で書く")のシートにコピーするマクロを設定したい。

("毛筆データー 筆で書く")
列がB列からCW列の100列と行が1行から4行
セルの書式設定で方向を縦書きに設定してある

< 使用 Excel:Excel2003、使用 OS:Windows10 >


 いくつか確認。

 1.現在のコードの条件は忘れていいのですね?
  現在のコードは A:C 列と、離れたE列を 転記先の B列から連続してコピペしてますね?
  しかも、転記元のセルの2行目を1行目に、3行目を2行目に ・・・ と ペースト先の行を変えていますね?

 2.毛筆データー 筆で書く シートのセルは すべて 縦書きに設定してあると考えていいのですか?
  それとも、その中でいくつか、縦書きに設定したセルがある。そのセルにのみ転記するのですか?

 3.毛筆データー 筆で書く シートのB列からCW列の100列と行が1行から4行 のみを固定で対象領域にするのですか?
  それとも、毛筆でかく 原本 シートの セルで値があるセルについて、この領域にかかわらず対象にするのですか?

(β) 2016/12/29(木) 17:21


 ↑ の質問の回答をお待ちしますが、たとえば

 Sub Macro2()
    With Worksheets("毛筆でかく 原本")
        .Range("A1", .UsedRange).Copy
    End With
    Worksheets("毛筆データー 筆で書く").Range("A1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
 End Sub

 これだと、【どんな不都合】が発生しますか?

(β) 2016/12/29(木) 17:55


横から失礼します。
 
「形式を選択して貼り付け」で
・値 を選択するとともに、
・行列を入れ替える にチェックを入れる
としてOKボタンを押します。
 
これをマクロ記録するとよいのではないですか? 
 

(γ) 2016/12/29(木) 19:14


 いくつか確認。の回答
1.
現在のコードは A:C 列と、離れたE列を 転記先の B列から連続してコピペしてますね
その通りです
  しかも、転記元のセルの2行目を1行目に、3行目を2行目に ・・・ と ペースト先の行を変えていますね
その通りです
2.
すべて 縦書きに設定してあると考えていいのですか
その通りです
3.
毛筆データー 筆で書く シートのB列からCW列の100列と行が1行から4行 のみを固定で対象領域にするのですか
その通りです

これだと、【どんな不都合】が発生しますか
実行時エラー
インデックスが有効範囲にありません
マクロ実行すると、上記が出てきますし、如何黄色になっています。

Worksheets("毛筆データー 筆で書く").Range("A1").PasteSpecial Paste:=xlPasteValues
(ウルトラ) 2016/12/29(木) 20:02


 >>インデックスが有効範囲にありません 

 ????????

 Worksheets("毛筆データー 筆で書く")  これは、そちらのコードにあったままですけど、
 そういう名前のシートがあるんですよね?

 なければ、もちろん インデックスエラーですけど。

 追記

 >> 1. の質問に対して 『その通りです』
  そのとおりなのは、コードを文章で記述しただけですから当たり前です。
  質問しているのは、その現行コードの転記ルールは無視していいのですね? ということです。

(β) 2016/12/29(木) 20:09


すみません、理解力が薄く申し訳ありません。

Worksheets("毛筆データー 筆で書く") これは、そちらのコードにあったままですけど、そういう名前のシートがあるんですよね?

 シート名のものがあり、ここに転記出来ればよいのです。

質問しているのは、その現行コードの転記ルールは無視していいのですね? ということです。

 質問の意図が分からず、申し訳ありません。転記ルールは無視していいのです。
(ウルトラ) 2016/12/30(金) 11:24


 ですから 報告されたコードでインデックスエラーになるということは、
『毛筆データー 筆で書く』 という名前のシートがない ということだと申し上げているんですが?

 標準モジュールに

 Sub Test()
   Worksheets("毛筆データー 筆で書く").Select
 end Sub

 これを『コピペで貼り付けて』実行してみてください。エラーになりませんか?

(β) 2016/12/30(金) 13:44


 Sub Test()
   Worksheets("毛筆データー 筆で書く").Select
 end Sub

これでは、エラーなってしまいました。

"毛筆データーと筆で書く"の間を詰めて実行したらエラーんなりませんでした。

"毛筆データー筆で書く"というシートにしたら出ました。

(ウルトラ) 2016/12/30(金) 17:49


 つまり、そちらのコードで指定していたシートが実際にはなかったということですね。

 これは、今後もよくでてくる可能性のある、うっかりミスですから、気を付けるとともに
 もし、シート名関係でインデックスエラーがでれば、あわてず、自分のコードで指定しているシート名と
 実際のシート名が、どこかちがっている、
 間や頭や末尾にスペースがくっついているとか、半角・全角の違いがあるとか。
 そういうことを、まずチェックしましょうね。

 で?

 (β) 2016/12/29(木) 17:55 でアップしたコードの実行結果ですが、どこか、思っている結果に対して
 違っているところはありましたか?

(β) 2016/12/30(金) 18:06


Sub Macro2()
    With Worksheets("毛筆でかく原本")
        .Range("A1", .UsedRange).Copy
    End With
    Worksheets("毛筆データー筆で書く").Range("A1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
 End Sub

シート名を上記のようにしたらエラーは出ませんが、思う結果がでません。"毛筆でかく原本"のシートをコピーしただけの状態になっています。

(ウルトラ) 2016/12/30(金) 18:31


 理解いただきたいのですが、何を確かめたいかというと、元シートのどこを、転記先のどこの値転記したいかという
 その要件です。

 もちろん、本来は、きちんと言葉で説明いただきたいのですが、それがでてこないので、全セルを値コピペしたときに
 具体的に、どこが思ったようにならなかったか、それを 教えてもらいたかったんです。

 ・このセルは転記したくないのに転記された
 ・このセルは転記されたけど、転記場所は ○○のセルであるべきところ、□□のセルに転記された

 等々。こういったことを具体的に教えてください。

 >>シートをコピーしただけの状態になっています。 

 少なくとも、横書きが縦書きにはなっていますよね?

(β) 2016/12/30(金) 19:16


 回答がありませんので、以下をアップしておきます。

 これでだめなら、どこが、どうだめなのかを具体的に教えてください。

 Sub Macro3()
    Worksheets("毛筆でかく 原本").Range("B1:CW4").Copy
    Worksheets("毛筆データー筆で書く").Range("B1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
 End Sub

(β) 2016/12/30(金) 20:36


お世話にります、初心者で大変申し訳ありません、お教え下さい。

マクロを実行した状態 

1.横書きが縦書きにはなっています

2."毛筆データー筆で書く" コピー先の状態
"毛筆でかく 原本A1〜A3のところだけが"毛筆データー筆で書く"A1〜A3に入っている 
"毛筆でかく 原本B1〜B3のところだけが"毛筆データー筆で書く"B1〜B3に入っている 
"毛筆でかく 原本C1〜C3のところだけが"毛筆データー筆で書く"C1〜C3に入っている
"毛筆でかく 原本D1〜D3のところだけが"毛筆データー筆で書く"D1〜D3に入っている(ここは、コピーする必要のないところ) 
"毛筆でかく 原本E1〜E3のところだけが"毛筆データー筆で書く"E1〜E3に入っている

3.全てが3行だけコピーされて、全てはコピーされていませんでした。

4."毛筆データー筆で書く" コピー先に入ってほしいデーター

"毛筆でかく 原本A2〜A100のところが"毛筆データー筆で書く"A1〜CW1に入いる 

"毛筆でかく 原本B2〜B100のところが"毛筆データー筆で書く"A2〜CW2に入いる 

"毛筆でかく 原本C2〜C100のところが"毛筆データー筆で書く"A3〜CW3に入いる 

"毛筆でかく 原本E2〜E100のところが"毛筆データー筆で書く"A4〜CW4に入いる 

ほしくないところ
"毛筆でかく 原本D2〜D100のところが"毛筆データー筆で書くに入ってほしくない 

以上です。つまり現在は縦書きになっていますが、横のデーターを縦のデーターとしてはいってほしいものが、一つひとつのデーターが順番に「2.」のように縦に入っています。

(ウルトラ) 2016/12/31(土) 10:47


 ということを最初から明確に説明すれば、なんということはないわけです。
 最初の質問文では、(ウルトラ) 2016/12/31(土) 10:47 で説明のあった転記要件が、全くわかりませんよね。

 ただ、転記元が たとえば A2〜A100 つまり 99セル。転記先が A列〜CW列 つまり 101セル。

 セル数が不一致ですが? 以下コードでは転記元セル数にあわせて 転記先を A列〜CU列 にしています。

 Sub Sample()
    Dim shF As Worksheet
    Dim shT As Worksheet

    Set shF = Sheets("毛筆でかく 原本") '★転記元シート
    Set shT = Sheets("毛筆データー筆で書く") '★転記先シート

    shT.Range("A1:CU3").Value = WorksheetFunction.Transpose(shF.Range("A2:C100"))
    shT.Range("A4:CU4").Value = WorksheetFunction.Transpose(shF.Range("E2:E100"))

 End Sub

(β) 2016/12/31(土) 11:16


すみませんでした、出来上がりました。

ただ、転記元が たとえば A2〜A100 つまり 99セル。転記先が A列〜CW列 つまり 101セル。

このこともそうですね、ありがとうございます。

なお、いつもどうにかならないかと思っていたので解決できてすごくうれしいです。ご面倒をおかけしました、重ね重ねですが、ありがとうごさいました。
(ウルトラ) 2016/12/31(土) 12:35


2016/12/29(木) 19:14 の私の発言に注意を払ってもらっていたら、
もっと早く解決に近づいたかもしれません。
残念だが致し方ない。これも一局の将棋?。

(γ) 2016/12/31(土) 20:21


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.