[[20161110222753]] 『関数をデータのある最終行までコピーできるマクロ』(すいな) ページの最後に飛ぶ

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

 

『関数をデータのある最終行までコピーできるマクロ』(すいな)

こんにちは。
お仕事でマクロを使いたいなと考えている、超初心者です。

毎月、行数が変動するデータを使用する予定です。

  A列  B列   C列 ・・・・
1     番号  名前
2     12340 佐藤
3     12345 田中
4     12332 鈴木
5     12361 山田
6     12399 古賀
7     12384 西村
:
:

やりたいことは
1、A2のセルに、B列の「番号」の下2桁を抽出する(RIGTH関数使用予定)。
2、A2の式を、B列にデータが入力されている最終行までコピーする。
3、表全体を選んで、昇順で並び変える。
 最優先:A列の値
 次の優先:B列の値

自分で、「マクロの記録」を使ってやってみたところ、
2、のオートフィルで関数をコピーするところが、
データの行数の変動に対応できていませんでした。

お時間ある方、よろしければ
3、までのマクロの組み方を、教えていただけませんでしょうか?

自分だけの仕事ではないのですが、
エクセルが使えない職員でも使えるように、
ボタン(フォームコントロール)を作って
ポチポチっと簡単に作業ができたらいいなと思っています。

よろしくお願い致します。

< 使用 Excel:Excel2007、使用 OS:unknown >


最初から、A列に関数をたくさん入力しておけば並べ替えだけですみませんか?

(マナ) 2016/11/10(木) 23:30


セルに式を入力するマクロ

 Sub test()

    Range("A2").Formula = "=right(B2,2)"

 End Sub

 Sub test2()

    Range("A2:A7").Formula = "=right(B2,2)"

 End Sub

 Sub test3()
    Dim r As Long

    r = Range("B" & Rows.Count).End(xlUp).Row  
    Range("A2:A" & r).Formula = "=right(B2,2)"

 End Sub

(マナ) 2016/11/10(木) 23:40


>自分だけの仕事ではないのですが、
>エクセルが使えない職員でも使えるように、
>ボタン(フォームコントロール)を作って
>ポチポチっと簡単に作業ができたらいいなと思っています。
誰かにマクロを作ってもらうより、
エクセルを使えるようになるように教育した方がよほど有益だと思いますが。。。

<<並び替え作業_作業手順書>>

>1、A2のセルに、B列の「番号」の下2桁を抽出する(RIGTH関数使用予定)。
A2セルに、「=right(B2,2)」と入力

>2、A2の式を、B列にデータが入力されている最終行までコピーする。
A2セルを選択し、右下にあるフィルハンドルをダブルクリック

>3、表全体を選んで、昇順で並び変える。
> 最優先:A列の値
> 次の優先:B列の値
B列を選択→データタブの並び替えとフィルターの「AZ↓」ボタンをクリック
A列を選択→「AZ↓」ボタンをクリック
<<手順書終わり>>

こういうメモ書いて渡しとけばできませんかね?
マクロでやるなら、この手順書をエクセル君の解るVBAという言語に翻訳するだけです。
この作業を「マクロの記録」してみると、
操作が、VBAに翻訳されて記録されます。
それを参考に、手順書を作ってやるだけです。
マクロ化したければ、まずはそこから始めてみてください。
そのうえで解らなかったり上手くいかなかったりしたことを、
聞いたらいいと思います。

「フィルハンドル」も解らなければ検索してください、
画像があった方が解りやすいので。。。。^^
(まっつわん) 2016/11/11(金) 08:13


 数式をある領域に、その参照を相対的に変化させながら埋め込む方法は
 マナさんのtest3のように、領域に対して、その領域の最初のセルに対する式を入れる、
 あるいは、まっつわんさんのレスのように、最初のセルに数式を入れて、あとはオートフィル。
 こういった方法がありますが、課題は、その領域をどのように求めるかですね。

 まっつわんさんの方法で実行したものをマクロ記録しますと、コード内では A2:A● と、
 その時の最終行の●が固定で生成されてしまいますので、ここを動的に取得したもので
 置き換えることが必要ですね。

 その最終行番号の求め方はマナさんのtest3にも書かれていますが、もう1つ、提示のレイアウトの場合

 ・A1 を選択。
 ・Ctrl/Shift/*

 これで、A1:A● までが選択されます。これをマクロ記録すると、コード内では A1:A● という固定領域ではなく

 Range("A1").CurrentRegion というものが登場します。Range("A1").CurrentRegion というのは そのセルが属する連続した表の矩形領域なんですが
 これを使って Range("A1").CurrentRegion.Rows.Count でも、●の値が取得できます。

 ご参考まで。

(β) 2016/11/11(金) 09:03


コメント返信:

[ 一覧(最新更新順) ]


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