Excel精英培训网

 找回密码
 注册

QQ登录

只需一步,快速开始

你正在寻找更好的Excel学习教程吗?Excel技巧80集+数据透视表+函数初中高全套+VBA80集,想学的这儿全都有
查看: 185|回复: 16
打印 上一主题 下一主题

[求助] 依据公司名称和相应的产品数量值,插入多行空白行

[复制链接]
跳转到指定楼层
1楼
发表于 2020-4-2 11:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
各位大神、大虾好!
      又要麻烦您们帮忙一下。谢谢!
A、B列为引用数据。
我想依C列的公司名称清单,和D列(公司相应的品种数量值)来决定在公司名称下要加插多行空白行。
我自已写的行不通。
Dim i as integer
Dim ii as integer
for i =3 to 18
      if cells(i,"C")<>"" then
             ii=cells(i,"D").value
       Rows(i & ":" & ii).Insert Shift:=xlDown
       end if
next
好像一直只会乱在上面加插,不能对应在A公司下面,或者B公司下面相应插多少行。
再次谢谢各位。


技术请教2.rar

9.5 KB, 下载次数: 11

分享到:  QQ好友和群QQ好友和群
收藏收藏
2楼
发表于 2020-4-2 13:15 | 只看该作者
本帖最后由 hfwufanhf2006 于 2020-4-2 13:16 编辑

我看了半天,你是不是只是想在C列和D列插入?如果是,测试下面的代码,如果不是我就没看懂,代码也不能用:
For i = 3 To 1000
    If IsEmpty(Cells(i, 3)) Then
       Exit For
    End If
    Cells(i, "c").Select
    If Cells(i, "C") <> "" Then
        ii = Cells(i, "D")
        Range("c" & i + 1 & ":d" & ii + i).Insert Shift:=xlDown
    End If
    i = i + ii
Next i

另外,这插入的代码是单项一次性的,就是说你插入了空行就变不回来了,先做个备份;

回复

使用道具 举报

3楼
发表于 2020-4-2 14:38 | 只看该作者
hfwufanhf2006 发表于 2020-4-2 13:15
我看了半天,你是不是只是想在C列和D列插入?如果是,测试下面的代码,如果不是我就没看懂,代码也不能用: ...

太好啦,谢谢您!您说的正是我想要的。感恩指教,谢谢!
回复

使用道具 举报

4楼
 楼主| 发表于 2020-4-3 16:39 | 只看该作者
hfwufanhf2006 发表于 2020-4-2 13:15
我看了半天,你是不是只是想在C列和D列插入?如果是,测试下面的代码,如果不是我就没看懂,代码也不能用: ...

老师好,想再请教一下。如果改成这样,是如何实施。我自已试了一下,不知道那里不成了。谢谢指教。
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 13
For ii = 3 To 7
'        If IsEmpty(Cells(ii, "C")) Then
'           eixt
'         End If
        For i = 3 To 20
            If Cells(j, "C") = Cells(i, "A") Then
             cell(k, "d") = Cells(j, "C")
             cell(k, "e") = Cells(i, "A").Offset(0, 1).Value
            k = k + 1
            End If
        Next
Next


技术请教2.rar (9.15 KB, 下载次数: 3)







回复

使用道具 举报

5楼
发表于 2020-4-3 18:11 | 只看该作者
redsunsky 发表于 2020-4-3 16:39
老师好,想再请教一下。如果改成这样,是如何实施。我自已试了一下,不知道那里不成了。谢谢指教。
Dim  ...

1、有变量的错误,比如If Cells(j, "C") = Cells(i, "A") Then,很明显不存在变量j;
2、有单词拼写错误, cell(k, "d")应该是cells(k,"d");
3、offset不需要,直接写单元格;
4、修改后的代码:
k = 14
For ii = 3 To [c10000].End(3).Row
    For i = 3 To [a10000].End(3).Row
        If Cells(i, "a") = Cells(ii, "c") Then
           Cells(k, "d") = Cells(i, "a")
           Cells(k, "e") = Cells(i, "b")
           k = k + 1
        End If
    Next
Next



评分

参与人数 1学分 +2 收起 理由
redsunsky + 2 谢谢老师指教!

查看全部评分

回复

使用道具 举报

6楼
 楼主| 发表于 2020-4-3 19:42 | 只看该作者
hfwufanhf2006 发表于 2020-4-3 18:11
1、有变量的错误,比如If Cells(j, "C") = Cells(i, "A") Then,很明显不存在变量j;
2、有单词拼写错误 ...

老师,为什么我写的J,就不是变量,您换成K就可以?好像都是一样有个字符代替。。
回复

使用道具 举报

7楼
 楼主| 发表于 2020-4-3 19:45 | 只看该作者
hfwufanhf2006 发表于 2020-4-3 18:11
1、有变量的错误,比如If Cells(j, "C") = Cells(i, "A") Then,很明显不存在变量j;
2、有单词拼写错误 ...

找到原因了,感恩您!
回复

使用道具 举报

8楼
 楼主| 发表于 2020-4-3 20:16 | 只看该作者
hfwufanhf2006 发表于 2020-4-2 13:15
我看了半天,你是不是只是想在C列和D列插入?如果是,测试下面的代码,如果不是我就没看懂,代码也不能用: ...

老师这个今晚我试改动一点点。遇到一些想不到的问题,又发过来,请老师帮帮眼,谢谢!不知道是 不我罗辑上又不动。所以跳不过去。Sub test()
For i = 3 To 1000
    If IsEmpty(Cells(i, 3)) Then
       Exit For
    End If
    Cells(i, "c").Select
    If Cells(i, "C") <> "" Then
        ii = Cells(i, "D")
        If ii >= 2 Then
        Range("c" & i + 1 & ":d" & ii + i - 1).Insert Shift:=xlDown
           i = i + ii - 1
        End If
        If ii = 1 Then
           i = i + ii
        End If
    End If

Next i
End Sub
碰见的问题.rar (12.84 KB, 下载次数: 4)

回复

使用道具 举报

9楼
发表于 2020-4-4 07:59 | 只看该作者
  1. Sub test()
  2.     Dim i As Integer, irow As Integer, n As Integer
  3.     irow = Range("d" & Rows.Count).End(xlUp).Row
  4.     For i = irow To 3 Step -1
  5.         n = Range("d" & i - 1).Value - 1
  6.         If n > 0 Then
  7.             Range("d" & i).EntireRow.Resize(n).Insert
  8.         End If
  9.     Next i
  10. End Sub
复制代码

评分

参与人数 1学分 +1 收起 理由
redsunsky + 1 谢谢帮忙

查看全部评分

回复

使用道具 举报

10楼
发表于 2020-4-4 10:23 | 只看该作者
redsunsky 发表于 2020-4-3 20:16
老师这个今晚我试改动一点点。遇到一些想不到的问题,又发过来,请老师帮帮眼,谢谢!不知道是 不我罗辑 ...

1、你代码明确排除了1的可能性:
        If ii >= 2 Then
        Range("c" & i + 1 & ":d" & ii + i - 1).Insert Shift:=xlDown

2、这个地方我也看不明白:
        If ii = 1 Then
           i = i + ii
        End If

        除非有明确目的,一般不要对特定的数字做限制;

      与我原来的比较:
      If Cells(i, "C") <> "" Then
          ii = Cells(i, "D")
          Range("c" & i + 1 & ":d" & ii + i).Insert Shift:=xlDown
      End If
      i = i + ii
      原来的代码只要数字不是零,都适用;

3、你下面一楼又贴了一段代码,我不知道是什么意思?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2020-4-28 06:19 , Processed in 0.062401 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
拼三张下载